commit 98c711a4fd084643344ec236896eb720581ece7f
parent 5d95ee5d779ccc0726743e9c501d2ae198cf8167
Author: lash <dev@holbrook.no>
Date: Sat, 25 Mar 2023 05:50:07 +0000
Bump version, fix license in contract
Diffstat:
7 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/js/contract/CraftNFT.bin b/js/contract/CraftNFT.bin
@@ -1 +1 @@
-60806040523480156200001157600080fd5b5060405162006c6038038062006c60833981810160405281019062000037919062000631565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816009908162000088919062000907565b5080600a90816200009a919062000907565b50620000ee602060126040518060400160405280600681526020017f736861323536000000000000000000000000000000000000000000000000000081525062000161640100000000026401000000009004565b6012601081905550602067ffffffffffffffff811115620001145762000113620004cd565b5b6040519080825280601f01601f191660200182016040528015620001475781602001600182028036833780820191505090505b506011908162000158919062000a5e565b50505062000db3565b6060819050601081511115620001ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a59062000ba6565b60405180910390fd5b620001b862000438565b6000600790505b60008160ff16106200021c576000600882620001dc919062000c04565b60ff1660ff9060020a029050600086821667ffffffffffffffff1611156200020557506200021c565b8180620002129062000c4a565b92505050620001bf565b6001816200022b919062000c78565b826020019060ff16908160ff168152505060088160076200024d919062000cb4565b62000259919062000c04565b60ff168567ffffffffffffffff169060020a02780100000000000000000000000000000000000000000000000002826080019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250508251826040019060ff16908160ff168152505082620002e79062000d43565b82606001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505085826000019060ff16908160ff168152505081600f60008767ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a8154816fffffffffffffffffffffffffffffffff02191690837001000000000000000000000000000000009004021790555060808201518160000160136101000a81548167ffffffffffffffff0219169083780100000000000000000000000000000000000000000000000090040217905550905050505050505050565b6040518060a00160405280600060ff168152602001600060ff168152602001600060ff16815260200160006fffffffffffffffffffffffffffffffff19168152602001600077ffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200050782620004bc565b810181811067ffffffffffffffff82111715620005295762000528620004cd565b5b80604052505050565b60006200053e6200049e565b90506200054c8282620004fc565b919050565b600067ffffffffffffffff8211156200056f576200056e620004cd565b5b6200057a82620004bc565b9050602081019050919050565b60005b83811015620005a75780820151818401526020810190506200058a565b60008484015250505050565b6000620005ca620005c48462000551565b62000532565b905082815260208101848484011115620005e957620005e8620004b7565b5b620005f684828562000587565b509392505050565b600082601f830112620006165762000615620004b2565b5b815162000628848260208601620005b3565b91505092915050565b600080604083850312156200064b576200064a620004a8565b5b600083015167ffffffffffffffff8111156200066c576200066b620004ad565b5b6200067a85828601620005fe565b925050602083015167ffffffffffffffff8111156200069e576200069d620004ad565b5b620006ac85828601620005fe565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070957607f821691505b6020821081036200071f576200071e620006c1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026200078c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200074a565b6200079886836200074a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007e5620007df620007d984620007b0565b620007ba565b620007b0565b9050919050565b6000819050919050565b6200080183620007c4565b620008196200081082620007ec565b8484546200075a565b825550505050565b600090565b6200083062000821565b6200083d818484620007f6565b505050565b5b8181101562000865576200085960008262000826565b60018101905062000843565b5050565b601f821115620008b4576200087e8162000725565b62000889846200073a565b8101602085101562000899578190505b620008b1620008a8856200073a565b83018262000842565b50505b505050565b60008160020a8304905092915050565b6000620008dc60001984600802620008b9565b1980831691505092915050565b6000620008f78383620008c9565b9150826002028217905092915050565b6200091282620006b6565b67ffffffffffffffff8111156200092e576200092d620004cd565b5b6200093a8254620006f0565b6200094782828562000869565b600060209050601f8311600181146200097f57600084156200096a578287015190505b620009768582620008e9565b865550620009e6565b601f1984166200098f8662000725565b60005b82811015620009b95784890151825560018201915060208501945060208101905062000992565b86831015620009d95784890151620009d5601f891682620008c9565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b60008190508160005260206000209050919050565b601f82111562000a595762000a2381620009f9565b62000a2e846200073a565b8101602085101562000a3e578190505b62000a5662000a4d856200073a565b83018262000842565b50505b505050565b62000a6982620009ee565b67ffffffffffffffff81111562000a855762000a84620004cd565b5b62000a918254620006f0565b62000a9e82828562000a0e565b600060209050601f83116001811462000ad6576000841562000ac1578287015190505b62000acd8582620008e9565b86555062000b3d565b601f19841662000ae686620009f9565b60005b8281101562000b105784890151825560018201915060208501945060208101905062000ae9565b8683101562000b30578489015162000b2c601f891682620008c9565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4552525f5052454649585f544f4f5f4c4f4e4700000000000000000000000000600082015250565b600062000b8e60138362000b45565b915062000b9b8262000b56565b602082019050919050565b6000602082019050818103600083015262000bc18162000b7f565b9050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c118262000bc8565b915062000c1e8362000bc8565b925082820262000c2e8162000bc8565b915080821462000c435762000c4262000bd5565b5b5092915050565b600062000c578262000bc8565b91506000820362000c6d5762000c6c62000bd5565b5b600182039050919050565b600062000c858262000bc8565b915062000c928362000bc8565b9250828201905060ff81111562000cae5762000cad62000bd5565b5b92915050565b600062000cc18262000bc8565b915062000cce8362000bc8565b9250828203905060ff81111562000cea5762000ce962000bd5565b5b92915050565b6000819050602082019050919050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b600062000d3a825162000d00565b80915050919050565b600062000d5082620009ee565b8262000d5c8462000cf0565b905062000d698162000d2c565b9250601082101562000dac5762000da77fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008026200074a565b831692505b5050919050565b615e9d8062000dc36000396000f3fe60806040526004361061026e576000357c01000000000000000000000000000000000000000000000000000000009004806386e90b5911610156578063c6eba7c4116100d3578063e985e9c511610097578063e985e9c51461099f578063f117e173146109dc578063f2fde38b14610a19578063f70a3de814610a56578063f9613ab214610a93578063f9f356e514610ad05761026e565b8063c6eba7c414610896578063c87b56dd146108bf578063d824ee4f146108fc578063da2824a814610939578063e8a7f4c5146109625761026e565b8063a5d6f2091161011a578063a5d6f20914610794578063adf288df146107d5578063b5fdeb2314610812578063b88d4fde1461083d578063c5bec6fc146108595761026e565b806386e90b59146106af5780638da5cb5b146106ec57806395d89b41146107175780639a7c5e9f14610742578063a22cb4651461076b5761026e565b806340c84b0e116101ef5780635344299a116101b35780635344299a14610566578063559f5dc91461058f5780635ae06f7e146105cf5780636352211e146105f85780636b9cb86a1461063557806370a08231146106725761026e565b806340c84b0e1461047c57806342842e0e146104a757806349f2553a146104c35780634f64b2be146104ec5780634f6ccce7146105295761026e565b80631f8cf649116102365780631f8cf6491461038057806323b872dd146103a957806324e0febc146103c55780632b29ba23146104025780632f745c591461043f5761026e565b806301ffc9a71461027357806306fdde03146102b0578063081812fc146102db578063150b7a021461031857806318160ddd14610355575b600080fd5b34801561027f57600080fd5b5061029a60048036038101906102959190614926565b610b0d565b6040516102a7919061496e565b60405180910390f35b3480156102bc57600080fd5b506102c5610c0c565b6040516102d29190614a19565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd9190614a71565b610c9a565b60405161030f9190614adf565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190614c5b565b610cd7565b60405161034c9190614ced565b60405180910390f35b34801561036157600080fd5b5061036a610d07565b6040516103779190614d17565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a29190614e4c565b610d14565b005b6103c360048036038101906103be9190614ebb565b610fd6565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190614f44565b611041565b6040516103f99190614f80565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190614f9b565b611059565b604051610436919061496e565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614fc8565b611105565b6040516104739190614d17565b60405180910390f35b34801561048857600080fd5b5061049161112a565b60405161049e919061505d565b60405180910390f35b6104c160048036038101906104bc9190614ebb565b6111b8565b005b3480156104cf57600080fd5b506104ea60048036038101906104e5919061507f565b611223565b005b3480156104f857600080fd5b50610513600480360381019061050e9190614a71565b61153b565b6040516105209190614f80565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b9190614a71565b61155f565b60405161055d9190614d17565b60405180910390f35b34801561057257600080fd5b5061058d600480360381019061058891906150c8565b611583565b005b34801561059b57600080fd5b506105b660048036038101906105b19190615111565b61160f565b6040516105c69493929190615172565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614f9b565b611696565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614a71565b6117b5565b60405161062c9190614adf565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906150c8565b6117f1565b6040516106699190614a19565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190614f9b565b611a0a565b6040516106a69190614d17565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906150c8565b611a53565b6040516106e39190614a19565b60405180910390f35b3480156106f857600080fd5b50610701611cfe565b60405161070e9190614adf565b60405180910390f35b34801561072357600080fd5b5061072c611d22565b6040516107399190614a19565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190614a71565b611db0565b005b34801561077757600080fd5b50610792600480360381019061078d91906151e3565b611ea1565b005b3480156107a057600080fd5b506107bb60048036038101906107b69190614a71565b612143565b6040516107cc9594939291906152a8565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906152fb565b6121e2565b6040516108099190614f80565b60405180910390f35b34801561081e57600080fd5b50610827612538565b604051610834919061505d565b60405180910390f35b61085760048036038101906108529190614c5b565b6125d5565b005b34801561086557600080fd5b50610880600480360381019061087b91906150c8565b6126b0565b60405161088d919061505d565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b891906153a1565b612a69565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190614a71565b612c21565b6040516108f39190614a19565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e91906153f4565b612d74565b6040516109309190614f80565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614f9b565b613019565b005b34801561096e57600080fd5b50610989600480360381019061098491906150c8565b613101565b604051610996919061505d565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190615447565b6134ba565b6040516109d3919061496e565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190615487565b613552565b604051610a109190614f80565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614f9b565b6136fc565b604051610a4d919061496e565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603810190610a789190615527565b6137a0565b604051610a8a919061496e565b60405180910390f35b348015610a9f57600080fd5b50610aba6004803603810190610ab59190614f44565b613ace565b604051610ac79190614f80565b60405180910390f35b348015610adc57600080fd5b50610af76004803603810190610af29190615567565b613b7a565b604051610b04919061505d565b60405180910390f35b6000806000837c0100000000000000000000000000000000000000000000000000000000900491506301ffc9a7847c0100000000000000000000000000000000000000000000000000000000900463ffffffff1603610b7157600192505050610c07565b60005b610100811015610bff5763ffffffff817fc22876c3d283ef1ddd9d2087150b7a02449a52f8abe1f1f5ed75b333f0440c0f908060020a820491505016915060008263ffffffff1603610bcc5760009350505050610c07565b8163ffffffff168363ffffffff1603610beb5760019350505050610c07565b602081610bf891906155f2565b9050610b74565b506000925050505b919050565b60098054610c1990615655565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4590615655565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b505050505081565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600063150b7a027c0100000000000000000000000000000000000000000000000000000000029050949350505050565b6000600680549050905090565b6060819050601081511115610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d55906156d2565b60405180910390fd5b610d66614818565b6000600790505b60008160ff1610610dc2576000600882610d8791906156f2565b60ff1660ff9060020a029050600086821667ffffffffffffffff161115610dae5750610dc2565b8180610db99061572f565b92505050610d6d565b600181610dcf9190615758565b826020019060ff16908160ff16815250506008816007610def919061578d565b610df991906156f2565b60ff168567ffffffffffffffff169060020a02780100000000000000000000000000000000000000000000000002826080019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250508251826040019060ff16908160ff168152505082610e85906157f7565b82606001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505085826000019060ff16908160ff168152505081600f60008767ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a8154816fffffffffffffffffffffffffffffffff02191690837001000000000000000000000000000000009004021790555060808201518160000160136101000a81548167ffffffffffffffff0219169083780100000000000000000000000000000000000000000000000090040217905550905050505050505050565b610fe1838383613e50565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110fe575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600c602052816000526040600020602052806000526040600020600091509150505481565b600b805461113790615655565b80601f016020809104026020016040519081016040528092919081815260200182805461116390615655565b80156111b05780601f10611185576101008083540402835291602001916111b0565b820191906000526020600020905b81548152906001019060200180831161119357829003601f168201915b505050505081565b6111c3838383613e50565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461128057600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836112b9919061585e565b815181106112ca576112c9615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461134a578080611346906158c1565b9150505b8067ffffffffffffffff81111561136457611363614b30565b5b6040519080825280601f01601f1916602001820160405280156113965781602001600182028036833780820191505090505b50600b90816113a59190615aab565b5060005b8251811015611496578281815181106113c5576113c4615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600b82815461141d90615655565b811061142c5761142b615892565b5b81546001161561144b5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f010000000000000000000000000000000000000000000000000000000000000084040217905550808061148e906158c1565b9150506113a9565b5081518114611536577f2f00000000000000000000000000000000000000000000000000000000000000600b835181546114cf90615655565b81106114de576114dd615892565b5b8154600116156114fd5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b6003818154811061154b57600080fd5b906000526020600020016000915090505481565b6006818154811061156f57600080fd5b906000526020600020016000915090505481565b6000600f6000601054815260200190815260200160002090508060000160009054906101000a900460ff1660ff168251146115bd57600080fd5b81601190816115cc9190615aab565b507f502ae868d71f78c5d099f033dd3007a4f58aebb3a2816544fe690f8b9604b56c6115f6612538565b604051611603919061505d565b60405180910390a15050565b6004602052816000526040600020818154811061162b57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff169080600001600d9054906101000a900460ff16905084565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061171b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190615bc9565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061180185613101565b9150600b805461181090615655565b9050905080825161182191906155f2565b67ffffffffffffffff81111561183a57611839614b30565b5b6040519080825280601f01601f19166020018201604052801561186c5781602001600182028036833780820191505090505b50925060005b8181101561193157600b81815461188890615655565b811061189757611896615892565b5b8154600116156118b65790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106118ef576118ee615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611929906158c1565b915050611872565b5060005b82518110156119fe5782818151811061195157611950615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106119ae576119ad615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806119e8906158c1565b92505080806119f6906158c1565b915050611935565b50829350505050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060006060806000611a65866126b0565b9150600f6000601054815260200190815260200160002093508360000160029054906101000a900460ff1660ff1690506001825182611aa491906155f2565b611aae91906155f2565b67ffffffffffffffff811115611ac757611ac6614b30565b5b6040519080825280601f01601f191660200182016040528015611af95781602001600182028036833780820191505090505b50925060005b81811015611bb3578460000160039054906101000a9004700100000000000000000000000000000000028160108110611b3b57611b3a615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002848281518110611b7157611b70615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611bab906158c1565b915050611aff565b50603a7f010000000000000000000000000000000000000000000000000000000000000002838281518110611beb57611bea615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611c25906158c1565b91505060005b8251811015611cf157828181518110611c4757611c46615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002848284611c9e91906155f2565b81518110611caf57611cae615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611ce9906158c1565b915050611c2b565b5082945050505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a8054611d2f90615655565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5b90615655565b8015611da85780601f10611d7d57610100808354040283529160200191611da8565b820191906000526020600020905b815481529060010190602001808311611d8b57829003601f168201915b505050505081565b6000600f6000838152602001908152602001600020905060008160000160009054906101000a900460ff1660ff1611611de857600080fd5b816010819055508060000160009054906101000a900460ff1660ff1667ffffffffffffffff811115611e1d57611e1c614b30565b5b6040519080825280601f01601f191660200182016040528015611e4f5781602001600182028036833780820191505090505b5060119081611e5e9190615aab565b507f502ae868d71f78c5d099f033dd3007a4f58aebb3a2816544fe690f8b9604b56c611e88612538565b604051611e95919061505d565b60405180910390a15050565b8015611fc257600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3f57600080fd5b81600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120da565b600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361205a57600080fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612137919061496e565b60405180910390a35050565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900470010000000000000000000000000000000002908060000160139054906101000a9004780100000000000000000000000000000000000000000000000002905085565b60008060008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061228b5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61229457600080fd5b60016004600087815260200190815260200160002080549050146122b757600080fd5b6000600460008781526020019081526020016000206000815481106122df576122de615892565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461231157600080fd5b600060010260056000878152602001908152602001600020541461233457600080fd5b8573ffffffffffffffffffffffffffffffffffffffff1692507fc0000000000000000000000000000000000000000000000000000000000000008317925082600102600560008781526020019081526020016000208190555084600190049150600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600d60008481526020019081526020016000208190555081600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249391906155f2565b925050819055506006856001900490806001815401808255809150506001900390600052602060002001600090919091909150558573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040516125249190614d17565b60405180910390a384935050505092915050565b60606125d06010546011805461254d90615655565b80601f016020809104026020016040519081016040528092919081815260200182805461257990615655565b80156125c65780601f1061259b576101008083540402835291602001916125c6565b820191906000526020600020905b8154815290600101906020018083116125a957829003601f168201915b5050505050613b7a565b905090565b6125e0848484613e50565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e8461269590615bfe565b6040516126a29190614f80565b60405180910390a450505050565b606080600080600285516126c49190615c65565b67ffffffffffffffff8111156126dd576126dc614b30565b5b6040519080825280601f01601f19166020018201604052801561270f5781602001600182028036833780820191505090505b5092506000905060005b6020811015612a5d57600460f087838151811061273957612738615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015612838576030836127cf9190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061280457612803615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506128aa565b6057836128459190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061287a57612879615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682815181106128bf576128be615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff1610156129bd576030836129489190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028460018461297891906155f2565b8151811061298957612988615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612a3b565b6057836129ca9190615758565b7f010000000000000000000000000000000000000000000000000000000000000002846001846129fa91906155f2565b81518110612a0b57612a0a615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282612a4891906155f2565b91508080612a55906158c1565b915050612719565b50829350505050919050565b6000600460008581526020019081526020016000208361ffff1681548110612a9457612a93615892565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae990615cf3565b60405180910390fd5b80600001600d9054906101000a900460ff1615612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b90615d5f565b60405180910390fd5b60008265ffffffffffff1603612b6e578060000160069054906101000a900465ffffffffffff1691505b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168265ffffffffffff161015612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce90615dcb565b60405180910390fd5b818160000160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550600181600001600d6101000a81548160ff02191690831515021790555050505050565b6060600060608360010291506000600460008481526020019081526020016000208054905003612c5757612c5482613ace565b91505b6000600460008481526020019081526020016000208054905011612c7a57600080fd5b602067ffffffffffffffff811115612c9557612c94614b30565b5b6040519080825280601f01601f191660200182016040528015612cc75781602001600182028036833780820191505090505b50905060005b6020811015612d6157828160208110612ce957612ce8615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110612d1f57612d1e615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612d59906158c1565b915050612ccd565b50612d6b816117f1565b92505050919050565b600080600460008581526020019081526020016000208361ffff1681548110612da057612d9f615892565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df590615cf3565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612ea15750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790615bc9565b60405180910390fd5b60008361ffff16148015612f12575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b8015612f2c575080600001600d9054906101000a900460ff165b15612f8b5760018160000160068282829054906101000a900465ffffffffffff16612f579190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550612f8385856121e2565b915050613012565b80600001600d9054906101000a900460ff1615612feb578060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff1610612fea57600080fd5b5b61300e8585858460000160069054906101000a900465ffffffffffff168561436b565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309e90615bc9565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606080600080600285516131159190615c65565b67ffffffffffffffff81111561312e5761312d614b30565b5b6040519080825280601f01601f1916602001820160405280156131605781602001600182028036833780820191505090505b5092506000905060005b60208110156134ae57600460f087838151811061318a57613189615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015613289576030836132209190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061325557613254615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506132fb565b6057836132969190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028483815181106132cb576132ca615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682815181106133105761330f615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff16101561340e576030836133999190615758565b7f010000000000000000000000000000000000000000000000000000000000000002846001846133c991906155f2565b815181106133da576133d9615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061348c565b60578361341b9190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028460018461344b91906155f2565b8151811061345c5761345b615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b60028261349991906155f2565b915080806134a6906158c1565b91505061316a565b50829350505050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff168154811061357e5761357d615892565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061362d5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366390615bc9565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff161161369757600080fd5b80600001600d9054906101000a900460ff166136b257600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff16106136e457600080fd5b6136f1868686868561436b565b915050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375757600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806138465750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387c90615bc9565b60405180910390fd5b61388d61487e565b60046000868152602001908152602001600020805490509150600082111561390a576000600460008781526020019081526020016000206000815481106138d7576138d6615892565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161161390957600080fd5b5b60008460050b0361392b576001816060019015159081151581525050613966565b60008460050b13156139655783816000019065ffffffffffff16908165ffffffffffff168152505060018160600190151590811515815250505b5b60046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff021916908315150217905550606082015181600001600d6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505580606001511515816000015165ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77d96978d8b40ac826d1984d992e71a84672e62d825fda78cd646656481d065b88604051613aba9190614f80565b60405180910390a460019250505092915050565b60008060056000848152602001908152602001600020549050613af081614723565b613af957600080fd5b613b0281614755565b15613b105782915050613b75565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b606060006060600f600086815260200190815260200160002091508160000160019054906101000a900460ff1660ff168260000160009054906101000a900460ff1660ff168551613bcb91906155f2565b613bd591906155f2565b67ffffffffffffffff811115613bee57613bed614b30565b5b6040519080825280601f01601f191660200182016040528015613c205781602001600182028036833780820191505090505b50905060005b8260000160019054906101000a900460ff1660ff16811015613cf6578260000160139054906101000a90047801000000000000000000000000000000000000000000000000028160088110613c7e57613c7d615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110613cb457613cb3615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613cee906158c1565b915050613c26565b8260000160009054906101000a900460ff167f010000000000000000000000000000000000000000000000000000000000000002828281518110613d3d57613d3c615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613d77906158c1565b91505060005b8551811015613e4357858181518110613d9957613d98615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838284613df091906155f2565b81518110613e0157613e00615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613e3b906158c1565b915050613d7d565b5081935050505092915050565b60008060003073ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613eaa9190614d17565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190615e3a565b92508573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613f2557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614614059573373ffffffffffffffffffffffffffffffffffffffff166007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061404f57503373ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61405857600080fd5b5b60006007600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506140b68486614787565b600d60008581526020019081526020016000205491506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614118919061585e565b9050818111156141c857600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055505b6000600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614305919061585e565b925050819055506001600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461435c91906155f2565b92505081905550505050505050565b60008060008060007fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008960019004169350603067ffffffffffffffff8961ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16841793508665ffffffffffff1684179350836001029150600060010260056000848152602001908152602001600020541461440057600080fd5b85600001600c9054906101000a900460ff16614462578560000160069054906101000a900465ffffffffffff1665ffffffffffff168765ffffffffffff161461446157600186600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff896001900416925060b8839060020a0292507f8000000000000000000000000000000000000000000000000000000000000000831792508973ffffffffffffffffffffffffffffffffffffffff168317925060018660000160068282829054906101000a900465ffffffffffff166144e39190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555085600001600d9054906101000a900460ff166145645760018660000160008282829054906101000a900465ffffffffffff166145419190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055505b826001026005600084815260200190815260200160002081905550600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600d60008681526020019081526020016000208190555083600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461467e91906155f2565b9250508190555060068490806001815401808255809150506001900390600052602060002001600090919091909150558973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88660405161470b9190614d17565b60405180910390a38194505050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000808360010290506005600082815260200190815260200160002054600190049150600082036147b757600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060a00160405280600060ff168152602001600060ff168152602001600060ff16815260200160006fffffffffffffffffffffffffffffffff19168152602001600077ffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614903816148ce565b811461490e57600080fd5b50565b600081359050614920816148fa565b92915050565b60006020828403121561493c5761493b6148c4565b5b600061494a84828501614911565b91505092915050565b60008115159050919050565b61496881614953565b82525050565b6000602082019050614983600083018461495f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149c35780820151818401526020810190506149a8565b60008484015250505050565b6000601f19601f8301169050919050565b60006149eb82614989565b6149f58185614994565b9350614a058185602086016149a5565b614a0e816149cf565b840191505092915050565b60006020820190508181036000830152614a3381846149e0565b905092915050565b6000819050919050565b614a4e81614a3b565b8114614a5957600080fd5b50565b600081359050614a6b81614a45565b92915050565b600060208284031215614a8757614a866148c4565b5b6000614a9584828501614a5c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ac982614a9e565b9050919050565b614ad981614abe565b82525050565b6000602082019050614af46000830184614ad0565b92915050565b614b0381614abe565b8114614b0e57600080fd5b50565b600081359050614b2081614afa565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b68826149cf565b810181811067ffffffffffffffff82111715614b8757614b86614b30565b5b80604052505050565b6000614b9a6148ba565b9050614ba68282614b5f565b919050565b600067ffffffffffffffff821115614bc657614bc5614b30565b5b614bcf826149cf565b9050602081019050919050565b82818337600083830152505050565b6000614bfe614bf984614bab565b614b90565b905082815260208101848484011115614c1a57614c19614b2b565b5b614c25848285614bdc565b509392505050565b600082601f830112614c4257614c41614b26565b5b8135614c52848260208601614beb565b91505092915050565b60008060008060808587031215614c7557614c746148c4565b5b6000614c8387828801614b11565b9450506020614c9487828801614b11565b9350506040614ca587828801614a5c565b925050606085013567ffffffffffffffff811115614cc657614cc56148c9565b5b614cd287828801614c2d565b91505092959194509250565b614ce7816148ce565b82525050565b6000602082019050614d026000830184614cde565b92915050565b614d1181614a3b565b82525050565b6000602082019050614d2c6000830184614d08565b92915050565b600060ff82169050919050565b614d4881614d32565b8114614d5357600080fd5b50565b600081359050614d6581614d3f565b92915050565b600067ffffffffffffffff82169050919050565b614d8881614d6b565b8114614d9357600080fd5b50565b600081359050614da581614d7f565b92915050565b600067ffffffffffffffff821115614dc657614dc5614b30565b5b614dcf826149cf565b9050602081019050919050565b6000614def614dea84614dab565b614b90565b905082815260208101848484011115614e0b57614e0a614b2b565b5b614e16848285614bdc565b509392505050565b600082601f830112614e3357614e32614b26565b5b8135614e43848260208601614ddc565b91505092915050565b600080600060608486031215614e6557614e646148c4565b5b6000614e7386828701614d56565b9350506020614e8486828701614d96565b925050604084013567ffffffffffffffff811115614ea557614ea46148c9565b5b614eb186828701614e1e565b9150509250925092565b600080600060608486031215614ed457614ed36148c4565b5b6000614ee286828701614b11565b9350506020614ef386828701614b11565b9250506040614f0486828701614a5c565b9150509250925092565b6000819050919050565b614f2181614f0e565b8114614f2c57600080fd5b50565b600081359050614f3e81614f18565b92915050565b600060208284031215614f5a57614f596148c4565b5b6000614f6884828501614f2f565b91505092915050565b614f7a81614f0e565b82525050565b6000602082019050614f956000830184614f71565b92915050565b600060208284031215614fb157614fb06148c4565b5b6000614fbf84828501614b11565b91505092915050565b60008060408385031215614fdf57614fde6148c4565b5b6000614fed85828601614b11565b9250506020614ffe85828601614a5c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b600061502f82615008565b6150398185615013565b93506150498185602086016149a5565b615052816149cf565b840191505092915050565b600060208201905081810360008301526150778184615024565b905092915050565b600060208284031215615095576150946148c4565b5b600082013567ffffffffffffffff8111156150b3576150b26148c9565b5b6150bf84828501614e1e565b91505092915050565b6000602082840312156150de576150dd6148c4565b5b600082013567ffffffffffffffff8111156150fc576150fb6148c9565b5b61510884828501614c2d565b91505092915050565b60008060408385031215615128576151276148c4565b5b600061513685828601614f2f565b925050602061514785828601614a5c565b9150509250929050565b600065ffffffffffff82169050919050565b61516c81615151565b82525050565b60006080820190506151876000830187615163565b6151946020830186615163565b6151a1604083018561495f565b6151ae606083018461495f565b95945050505050565b6151c081614953565b81146151cb57600080fd5b50565b6000813590506151dd816151b7565b92915050565b600080604083850312156151fa576151f96148c4565b5b600061520885828601614b11565b9250506020615219858286016151ce565b9150509250929050565b61522c81614d32565b82525050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b61526781615232565b82525050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b6152a28161526d565b82525050565b600060a0820190506152bd6000830188615223565b6152ca6020830187615223565b6152d76040830186615223565b6152e4606083018561525e565b6152f16080830184615299565b9695505050505050565b60008060408385031215615312576153116148c4565b5b600061532085828601614b11565b925050602061533185828601614f2f565b9150509250929050565b600061ffff82169050919050565b6153528161533b565b811461535d57600080fd5b50565b60008135905061536f81615349565b92915050565b61537e81615151565b811461538957600080fd5b50565b60008135905061539b81615375565b92915050565b6000806000606084860312156153ba576153b96148c4565b5b60006153c886828701614f2f565b93505060206153d986828701615360565b92505060406153ea8682870161538c565b9150509250925092565b60008060006060848603121561540d5761540c6148c4565b5b600061541b86828701614b11565b935050602061542c86828701614f2f565b925050604061543d86828701615360565b9150509250925092565b6000806040838503121561545e5761545d6148c4565b5b600061546c85828601614b11565b925050602061547d85828601614b11565b9150509250929050565b600080600080608085870312156154a1576154a06148c4565b5b60006154af87828801614b11565b94505060206154c087828801614f2f565b93505060406154d187828801615360565b92505060606154e28782880161538c565b91505092959194509250565b60008160050b9050919050565b615504816154ee565b811461550f57600080fd5b50565b600081359050615521816154fb565b92915050565b6000806040838503121561553e5761553d6148c4565b5b600061554c85828601614f2f565b925050602061555d85828601615512565b9150509250929050565b6000806040838503121561557e5761557d6148c4565b5b600061558c85828601614a5c565b925050602083013567ffffffffffffffff8111156155ad576155ac6148c9565b5b6155b985828601614c2d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006155fd82614a3b565b915061560883614a3b565b92508282019050808211156156205761561f6155c3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061566d57607f821691505b6020821081036156805761567f615626565b5b50919050565b7f4552525f5052454649585f544f4f5f4c4f4e4700000000000000000000000000600082015250565b60006156bc601383614994565b91506156c782615686565b602082019050919050565b600060208201905081810360008301526156eb816156af565b9050919050565b60006156fd82614d32565b915061570883614d32565b925082820261571681614d32565b9150808214615728576157276155c3565b5b5092915050565b600061573a82614d32565b91506000820361574d5761574c6155c3565b5b600182039050919050565b600061576382614d32565b915061576e83614d32565b9250828201905060ff811115615787576157866155c3565b5b92915050565b600061579882614d32565b91506157a383614d32565b9250828203905060ff8111156157bc576157bb6155c3565b5b92915050565b6000819050602082019050919050565b60006157de8251615232565b80915050919050565b60008160020a8302905092915050565b600061580282615008565b8261580c846157c2565b9050615817816157d2565b92506010821015615857576158527fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008026157e7565b831692505b5050919050565b600061586982614a3b565b915061587483614a3b565b925082820390508181111561588c5761588b6155c3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006158cc82614a3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158fe576158fd6155c3565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60006008830261595e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826157e7565b61596886836157e7565b95508019841693508086168417925050509392505050565b6000819050919050565b60006159a56159a061599b84614a3b565b615980565b614a3b565b9050919050565b6000819050919050565b6159bf8361598a565b6159d36159cb826159ac565b84845461592e565b825550505050565b600090565b6159e86159db565b6159f38184846159b6565b505050565b5b81811015615a1757615a0c6000826159e0565b6001810190506159f9565b5050565b601f821115615a5c57615a2d81615909565b615a368461591e565b81016020851015615a45578190505b615a59615a518561591e565b8301826159f8565b50505b505050565b60008160020a8304905092915050565b6000615a8260001984600802615a61565b1980831691505092915050565b6000615a9b8383615a71565b9150826002028217905092915050565b615ab482615008565b67ffffffffffffffff811115615acd57615acc614b30565b5b615ad78254615655565b615ae2828285615a1b565b600060209050601f831160018114615b155760008415615b03578287015190505b615b0d8582615a8f565b865550615b75565b601f198416615b2386615909565b60005b82811015615b4b57848901518255600182019150602085019450602081019050615b26565b86831015615b685784890151615b64601f891682615a71565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000615bb3600a83614994565b9150615bbe82615b7d565b602082019050919050565b60006020820190508181036000830152615be281615ba6565b9050919050565b6000615bf58251614f0e565b80915050919050565b6000615c0982615008565b82615c13846157c2565b9050615c1e81615be9565b92506020821015615c5e57615c597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026157e7565b831692505b5050919050565b6000615c7082614a3b565b9150615c7b83614a3b565b9250828202615c8981614a3b565b91508282048414831517615ca057615c9f6155c3565b5b5092915050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b6000615cdd600a83614994565b9150615ce882615ca7565b602082019050919050565b60006020820190508181036000830152615d0c81615cd0565b9050919050565b7f4552525f43415050454400000000000000000000000000000000000000000000600082015250565b6000615d49600a83614994565b9150615d5482615d13565b602082019050919050565b60006020820190508181036000830152615d7881615d3c565b9050919050565b7f4552525f4341505f4c4f57000000000000000000000000000000000000000000600082015250565b6000615db5600b83614994565b9150615dc082615d7f565b602082019050919050565b60006020820190508181036000830152615de481615da8565b9050919050565b6000615df682615151565b9150615e0183615151565b9250828201905065ffffffffffff811115615e1f57615e1e6155c3565b5b92915050565b600081519050615e3481614afa565b92915050565b600060208284031215615e5057615e4f6148c4565b5b6000615e5e84828501615e25565b9150509291505056fea264697066735822122060e4e28a0ccbc274f9028446f9345cf3cce292496cfa563a0b67d1374a8e763d64736f6c63430008120033
-\ No newline at end of file
+60806040523480156200001157600080fd5b5060405162006c6038038062006c60833981810160405281019062000037919062000631565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816009908162000088919062000907565b5080600a90816200009a919062000907565b50620000ee602060126040518060400160405280600681526020017f736861323536000000000000000000000000000000000000000000000000000081525062000161640100000000026401000000009004565b6012601081905550602067ffffffffffffffff811115620001145762000113620004cd565b5b6040519080825280601f01601f191660200182016040528015620001475781602001600182028036833780820191505090505b506011908162000158919062000a5e565b50505062000db3565b6060819050601081511115620001ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a59062000ba6565b60405180910390fd5b620001b862000438565b6000600790505b60008160ff16106200021c576000600882620001dc919062000c04565b60ff1660ff9060020a029050600086821667ffffffffffffffff1611156200020557506200021c565b8180620002129062000c4a565b92505050620001bf565b6001816200022b919062000c78565b826020019060ff16908160ff168152505060088160076200024d919062000cb4565b62000259919062000c04565b60ff168567ffffffffffffffff169060020a02780100000000000000000000000000000000000000000000000002826080019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250508251826040019060ff16908160ff168152505082620002e79062000d43565b82606001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505085826000019060ff16908160ff168152505081600f60008767ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a8154816fffffffffffffffffffffffffffffffff02191690837001000000000000000000000000000000009004021790555060808201518160000160136101000a81548167ffffffffffffffff0219169083780100000000000000000000000000000000000000000000000090040217905550905050505050505050565b6040518060a00160405280600060ff168152602001600060ff168152602001600060ff16815260200160006fffffffffffffffffffffffffffffffff19168152602001600077ffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200050782620004bc565b810181811067ffffffffffffffff82111715620005295762000528620004cd565b5b80604052505050565b60006200053e6200049e565b90506200054c8282620004fc565b919050565b600067ffffffffffffffff8211156200056f576200056e620004cd565b5b6200057a82620004bc565b9050602081019050919050565b60005b83811015620005a75780820151818401526020810190506200058a565b60008484015250505050565b6000620005ca620005c48462000551565b62000532565b905082815260208101848484011115620005e957620005e8620004b7565b5b620005f684828562000587565b509392505050565b600082601f830112620006165762000615620004b2565b5b815162000628848260208601620005b3565b91505092915050565b600080604083850312156200064b576200064a620004a8565b5b600083015167ffffffffffffffff8111156200066c576200066b620004ad565b5b6200067a85828601620005fe565b925050602083015167ffffffffffffffff8111156200069e576200069d620004ad565b5b620006ac85828601620005fe565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070957607f821691505b6020821081036200071f576200071e620006c1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026200078c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200074a565b6200079886836200074a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007e5620007df620007d984620007b0565b620007ba565b620007b0565b9050919050565b6000819050919050565b6200080183620007c4565b620008196200081082620007ec565b8484546200075a565b825550505050565b600090565b6200083062000821565b6200083d818484620007f6565b505050565b5b8181101562000865576200085960008262000826565b60018101905062000843565b5050565b601f821115620008b4576200087e8162000725565b62000889846200073a565b8101602085101562000899578190505b620008b1620008a8856200073a565b83018262000842565b50505b505050565b60008160020a8304905092915050565b6000620008dc60001984600802620008b9565b1980831691505092915050565b6000620008f78383620008c9565b9150826002028217905092915050565b6200091282620006b6565b67ffffffffffffffff8111156200092e576200092d620004cd565b5b6200093a8254620006f0565b6200094782828562000869565b600060209050601f8311600181146200097f57600084156200096a578287015190505b620009768582620008e9565b865550620009e6565b601f1984166200098f8662000725565b60005b82811015620009b95784890151825560018201915060208501945060208101905062000992565b86831015620009d95784890151620009d5601f891682620008c9565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b60008190508160005260206000209050919050565b601f82111562000a595762000a2381620009f9565b62000a2e846200073a565b8101602085101562000a3e578190505b62000a5662000a4d856200073a565b83018262000842565b50505b505050565b62000a6982620009ee565b67ffffffffffffffff81111562000a855762000a84620004cd565b5b62000a918254620006f0565b62000a9e82828562000a0e565b600060209050601f83116001811462000ad6576000841562000ac1578287015190505b62000acd8582620008e9565b86555062000b3d565b601f19841662000ae686620009f9565b60005b8281101562000b105784890151825560018201915060208501945060208101905062000ae9565b8683101562000b30578489015162000b2c601f891682620008c9565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4552525f5052454649585f544f4f5f4c4f4e4700000000000000000000000000600082015250565b600062000b8e60138362000b45565b915062000b9b8262000b56565b602082019050919050565b6000602082019050818103600083015262000bc18162000b7f565b9050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c118262000bc8565b915062000c1e8362000bc8565b925082820262000c2e8162000bc8565b915080821462000c435762000c4262000bd5565b5b5092915050565b600062000c578262000bc8565b91506000820362000c6d5762000c6c62000bd5565b5b600182039050919050565b600062000c858262000bc8565b915062000c928362000bc8565b9250828201905060ff81111562000cae5762000cad62000bd5565b5b92915050565b600062000cc18262000bc8565b915062000cce8362000bc8565b9250828203905060ff81111562000cea5762000ce962000bd5565b5b92915050565b6000819050602082019050919050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b600062000d3a825162000d00565b80915050919050565b600062000d5082620009ee565b8262000d5c8462000cf0565b905062000d698162000d2c565b9250601082101562000dac5762000da77fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008026200074a565b831692505b5050919050565b615e9d8062000dc36000396000f3fe60806040526004361061026e576000357c01000000000000000000000000000000000000000000000000000000009004806386e90b5911610156578063c6eba7c4116100d3578063e985e9c511610097578063e985e9c51461099f578063f117e173146109dc578063f2fde38b14610a19578063f70a3de814610a56578063f9613ab214610a93578063f9f356e514610ad05761026e565b8063c6eba7c414610896578063c87b56dd146108bf578063d824ee4f146108fc578063da2824a814610939578063e8a7f4c5146109625761026e565b8063a5d6f2091161011a578063a5d6f20914610794578063adf288df146107d5578063b5fdeb2314610812578063b88d4fde1461083d578063c5bec6fc146108595761026e565b806386e90b59146106af5780638da5cb5b146106ec57806395d89b41146107175780639a7c5e9f14610742578063a22cb4651461076b5761026e565b806340c84b0e116101ef5780635344299a116101b35780635344299a14610566578063559f5dc91461058f5780635ae06f7e146105cf5780636352211e146105f85780636b9cb86a1461063557806370a08231146106725761026e565b806340c84b0e1461047c57806342842e0e146104a757806349f2553a146104c35780634f64b2be146104ec5780634f6ccce7146105295761026e565b80631f8cf649116102365780631f8cf6491461038057806323b872dd146103a957806324e0febc146103c55780632b29ba23146104025780632f745c591461043f5761026e565b806301ffc9a71461027357806306fdde03146102b0578063081812fc146102db578063150b7a021461031857806318160ddd14610355575b600080fd5b34801561027f57600080fd5b5061029a60048036038101906102959190614926565b610b0d565b6040516102a7919061496e565b60405180910390f35b3480156102bc57600080fd5b506102c5610c0c565b6040516102d29190614a19565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd9190614a71565b610c9a565b60405161030f9190614adf565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190614c5b565b610cd7565b60405161034c9190614ced565b60405180910390f35b34801561036157600080fd5b5061036a610d07565b6040516103779190614d17565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a29190614e4c565b610d14565b005b6103c360048036038101906103be9190614ebb565b610fd6565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190614f44565b611041565b6040516103f99190614f80565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190614f9b565b611059565b604051610436919061496e565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614fc8565b611105565b6040516104739190614d17565b60405180910390f35b34801561048857600080fd5b5061049161112a565b60405161049e919061505d565b60405180910390f35b6104c160048036038101906104bc9190614ebb565b6111b8565b005b3480156104cf57600080fd5b506104ea60048036038101906104e5919061507f565b611223565b005b3480156104f857600080fd5b50610513600480360381019061050e9190614a71565b61153b565b6040516105209190614f80565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b9190614a71565b61155f565b60405161055d9190614d17565b60405180910390f35b34801561057257600080fd5b5061058d600480360381019061058891906150c8565b611583565b005b34801561059b57600080fd5b506105b660048036038101906105b19190615111565b61160f565b6040516105c69493929190615172565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614f9b565b611696565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614a71565b6117b5565b60405161062c9190614adf565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906150c8565b6117f1565b6040516106699190614a19565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190614f9b565b611a0a565b6040516106a69190614d17565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906150c8565b611a53565b6040516106e39190614a19565b60405180910390f35b3480156106f857600080fd5b50610701611cfe565b60405161070e9190614adf565b60405180910390f35b34801561072357600080fd5b5061072c611d22565b6040516107399190614a19565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190614a71565b611db0565b005b34801561077757600080fd5b50610792600480360381019061078d91906151e3565b611ea1565b005b3480156107a057600080fd5b506107bb60048036038101906107b69190614a71565b612143565b6040516107cc9594939291906152a8565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906152fb565b6121e2565b6040516108099190614f80565b60405180910390f35b34801561081e57600080fd5b50610827612538565b604051610834919061505d565b60405180910390f35b61085760048036038101906108529190614c5b565b6125d5565b005b34801561086557600080fd5b50610880600480360381019061087b91906150c8565b6126b0565b60405161088d919061505d565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b891906153a1565b612a69565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190614a71565b612c21565b6040516108f39190614a19565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e91906153f4565b612d74565b6040516109309190614f80565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614f9b565b613019565b005b34801561096e57600080fd5b50610989600480360381019061098491906150c8565b613101565b604051610996919061505d565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190615447565b6134ba565b6040516109d3919061496e565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190615487565b613552565b604051610a109190614f80565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614f9b565b6136fc565b604051610a4d919061496e565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603810190610a789190615527565b6137a0565b604051610a8a919061496e565b60405180910390f35b348015610a9f57600080fd5b50610aba6004803603810190610ab59190614f44565b613ace565b604051610ac79190614f80565b60405180910390f35b348015610adc57600080fd5b50610af76004803603810190610af29190615567565b613b7a565b604051610b04919061505d565b60405180910390f35b6000806000837c0100000000000000000000000000000000000000000000000000000000900491506301ffc9a7847c0100000000000000000000000000000000000000000000000000000000900463ffffffff1603610b7157600192505050610c07565b60005b610100811015610bff5763ffffffff817fc22876c3d283ef1ddd9d2087150b7a02449a52f8abe1f1f5ed75b333f0440c0f908060020a820491505016915060008263ffffffff1603610bcc5760009350505050610c07565b8163ffffffff168363ffffffff1603610beb5760019350505050610c07565b602081610bf891906155f2565b9050610b74565b506000925050505b919050565b60098054610c1990615655565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4590615655565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b505050505081565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600063150b7a027c0100000000000000000000000000000000000000000000000000000000029050949350505050565b6000600680549050905090565b6060819050601081511115610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d55906156d2565b60405180910390fd5b610d66614818565b6000600790505b60008160ff1610610dc2576000600882610d8791906156f2565b60ff1660ff9060020a029050600086821667ffffffffffffffff161115610dae5750610dc2565b8180610db99061572f565b92505050610d6d565b600181610dcf9190615758565b826020019060ff16908160ff16815250506008816007610def919061578d565b610df991906156f2565b60ff168567ffffffffffffffff169060020a02780100000000000000000000000000000000000000000000000002826080019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250508251826040019060ff16908160ff168152505082610e85906157f7565b82606001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505085826000019060ff16908160ff168152505081600f60008767ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a8154816fffffffffffffffffffffffffffffffff02191690837001000000000000000000000000000000009004021790555060808201518160000160136101000a81548167ffffffffffffffff0219169083780100000000000000000000000000000000000000000000000090040217905550905050505050505050565b610fe1838383613e50565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110fe575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600c602052816000526040600020602052806000526040600020600091509150505481565b600b805461113790615655565b80601f016020809104026020016040519081016040528092919081815260200182805461116390615655565b80156111b05780601f10611185576101008083540402835291602001916111b0565b820191906000526020600020905b81548152906001019060200180831161119357829003601f168201915b505050505081565b6111c3838383613e50565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461128057600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836112b9919061585e565b815181106112ca576112c9615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461134a578080611346906158c1565b9150505b8067ffffffffffffffff81111561136457611363614b30565b5b6040519080825280601f01601f1916602001820160405280156113965781602001600182028036833780820191505090505b50600b90816113a59190615aab565b5060005b8251811015611496578281815181106113c5576113c4615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600b82815461141d90615655565b811061142c5761142b615892565b5b81546001161561144b5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f010000000000000000000000000000000000000000000000000000000000000084040217905550808061148e906158c1565b9150506113a9565b5081518114611536577f2f00000000000000000000000000000000000000000000000000000000000000600b835181546114cf90615655565b81106114de576114dd615892565b5b8154600116156114fd5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b6003818154811061154b57600080fd5b906000526020600020016000915090505481565b6006818154811061156f57600080fd5b906000526020600020016000915090505481565b6000600f6000601054815260200190815260200160002090508060000160009054906101000a900460ff1660ff168251146115bd57600080fd5b81601190816115cc9190615aab565b507f502ae868d71f78c5d099f033dd3007a4f58aebb3a2816544fe690f8b9604b56c6115f6612538565b604051611603919061505d565b60405180910390a15050565b6004602052816000526040600020818154811061162b57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff169080600001600d9054906101000a900460ff16905084565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061171b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190615bc9565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061180185613101565b9150600b805461181090615655565b9050905080825161182191906155f2565b67ffffffffffffffff81111561183a57611839614b30565b5b6040519080825280601f01601f19166020018201604052801561186c5781602001600182028036833780820191505090505b50925060005b8181101561193157600b81815461188890615655565b811061189757611896615892565b5b8154600116156118b65790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106118ef576118ee615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611929906158c1565b915050611872565b5060005b82518110156119fe5782818151811061195157611950615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106119ae576119ad615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806119e8906158c1565b92505080806119f6906158c1565b915050611935565b50829350505050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060006060806000611a65866126b0565b9150600f6000601054815260200190815260200160002093508360000160029054906101000a900460ff1660ff1690506001825182611aa491906155f2565b611aae91906155f2565b67ffffffffffffffff811115611ac757611ac6614b30565b5b6040519080825280601f01601f191660200182016040528015611af95781602001600182028036833780820191505090505b50925060005b81811015611bb3578460000160039054906101000a9004700100000000000000000000000000000000028160108110611b3b57611b3a615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002848281518110611b7157611b70615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611bab906158c1565b915050611aff565b50603a7f010000000000000000000000000000000000000000000000000000000000000002838281518110611beb57611bea615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611c25906158c1565b91505060005b8251811015611cf157828181518110611c4757611c46615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002848284611c9e91906155f2565b81518110611caf57611cae615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611ce9906158c1565b915050611c2b565b5082945050505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a8054611d2f90615655565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5b90615655565b8015611da85780601f10611d7d57610100808354040283529160200191611da8565b820191906000526020600020905b815481529060010190602001808311611d8b57829003601f168201915b505050505081565b6000600f6000838152602001908152602001600020905060008160000160009054906101000a900460ff1660ff1611611de857600080fd5b816010819055508060000160009054906101000a900460ff1660ff1667ffffffffffffffff811115611e1d57611e1c614b30565b5b6040519080825280601f01601f191660200182016040528015611e4f5781602001600182028036833780820191505090505b5060119081611e5e9190615aab565b507f502ae868d71f78c5d099f033dd3007a4f58aebb3a2816544fe690f8b9604b56c611e88612538565b604051611e95919061505d565b60405180910390a15050565b8015611fc257600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3f57600080fd5b81600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120da565b600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361205a57600080fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612137919061496e565b60405180910390a35050565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900470010000000000000000000000000000000002908060000160139054906101000a9004780100000000000000000000000000000000000000000000000002905085565b60008060008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061228b5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61229457600080fd5b60016004600087815260200190815260200160002080549050146122b757600080fd5b6000600460008781526020019081526020016000206000815481106122df576122de615892565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461231157600080fd5b600060010260056000878152602001908152602001600020541461233457600080fd5b8573ffffffffffffffffffffffffffffffffffffffff1692507fc0000000000000000000000000000000000000000000000000000000000000008317925082600102600560008781526020019081526020016000208190555084600190049150600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600d60008481526020019081526020016000208190555081600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249391906155f2565b925050819055506006856001900490806001815401808255809150506001900390600052602060002001600090919091909150558573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040516125249190614d17565b60405180910390a384935050505092915050565b60606125d06010546011805461254d90615655565b80601f016020809104026020016040519081016040528092919081815260200182805461257990615655565b80156125c65780601f1061259b576101008083540402835291602001916125c6565b820191906000526020600020905b8154815290600101906020018083116125a957829003601f168201915b5050505050613b7a565b905090565b6125e0848484613e50565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e8461269590615bfe565b6040516126a29190614f80565b60405180910390a450505050565b606080600080600285516126c49190615c65565b67ffffffffffffffff8111156126dd576126dc614b30565b5b6040519080825280601f01601f19166020018201604052801561270f5781602001600182028036833780820191505090505b5092506000905060005b6020811015612a5d57600460f087838151811061273957612738615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015612838576030836127cf9190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061280457612803615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506128aa565b6057836128459190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061287a57612879615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682815181106128bf576128be615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff1610156129bd576030836129489190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028460018461297891906155f2565b8151811061298957612988615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612a3b565b6057836129ca9190615758565b7f010000000000000000000000000000000000000000000000000000000000000002846001846129fa91906155f2565b81518110612a0b57612a0a615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282612a4891906155f2565b91508080612a55906158c1565b915050612719565b50829350505050919050565b6000600460008581526020019081526020016000208361ffff1681548110612a9457612a93615892565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae990615cf3565b60405180910390fd5b80600001600d9054906101000a900460ff1615612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b90615d5f565b60405180910390fd5b60008265ffffffffffff1603612b6e578060000160069054906101000a900465ffffffffffff1691505b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168265ffffffffffff161015612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce90615dcb565b60405180910390fd5b818160000160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550600181600001600d6101000a81548160ff02191690831515021790555050505050565b6060600060608360010291506000600460008481526020019081526020016000208054905003612c5757612c5482613ace565b91505b6000600460008481526020019081526020016000208054905011612c7a57600080fd5b602067ffffffffffffffff811115612c9557612c94614b30565b5b6040519080825280601f01601f191660200182016040528015612cc75781602001600182028036833780820191505090505b50905060005b6020811015612d6157828160208110612ce957612ce8615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110612d1f57612d1e615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612d59906158c1565b915050612ccd565b50612d6b816117f1565b92505050919050565b600080600460008581526020019081526020016000208361ffff1681548110612da057612d9f615892565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df590615cf3565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612ea15750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790615bc9565b60405180910390fd5b60008361ffff16148015612f12575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b8015612f2c575080600001600d9054906101000a900460ff165b15612f8b5760018160000160068282829054906101000a900465ffffffffffff16612f579190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550612f8385856121e2565b915050613012565b80600001600d9054906101000a900460ff1615612feb578060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff1610612fea57600080fd5b5b61300e8585858460000160069054906101000a900465ffffffffffff168561436b565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309e90615bc9565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606080600080600285516131159190615c65565b67ffffffffffffffff81111561312e5761312d614b30565b5b6040519080825280601f01601f1916602001820160405280156131605781602001600182028036833780820191505090505b5092506000905060005b60208110156134ae57600460f087838151811061318a57613189615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015613289576030836132209190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061325557613254615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506132fb565b6057836132969190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028483815181106132cb576132ca615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682815181106133105761330f615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff16101561340e576030836133999190615758565b7f010000000000000000000000000000000000000000000000000000000000000002846001846133c991906155f2565b815181106133da576133d9615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061348c565b60578361341b9190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028460018461344b91906155f2565b8151811061345c5761345b615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b60028261349991906155f2565b915080806134a6906158c1565b91505061316a565b50829350505050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff168154811061357e5761357d615892565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061362d5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366390615bc9565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff161161369757600080fd5b80600001600d9054906101000a900460ff166136b257600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff16106136e457600080fd5b6136f1868686868561436b565b915050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375757600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806138465750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387c90615bc9565b60405180910390fd5b61388d61487e565b60046000868152602001908152602001600020805490509150600082111561390a576000600460008781526020019081526020016000206000815481106138d7576138d6615892565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161161390957600080fd5b5b60008460050b0361392b576001816060019015159081151581525050613966565b60008460050b13156139655783816000019065ffffffffffff16908165ffffffffffff168152505060018160600190151590811515815250505b5b60046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff021916908315150217905550606082015181600001600d6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505580606001511515816000015165ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77d96978d8b40ac826d1984d992e71a84672e62d825fda78cd646656481d065b88604051613aba9190614f80565b60405180910390a460019250505092915050565b60008060056000848152602001908152602001600020549050613af081614723565b613af957600080fd5b613b0281614755565b15613b105782915050613b75565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b606060006060600f600086815260200190815260200160002091508160000160019054906101000a900460ff1660ff168260000160009054906101000a900460ff1660ff168551613bcb91906155f2565b613bd591906155f2565b67ffffffffffffffff811115613bee57613bed614b30565b5b6040519080825280601f01601f191660200182016040528015613c205781602001600182028036833780820191505090505b50905060005b8260000160019054906101000a900460ff1660ff16811015613cf6578260000160139054906101000a90047801000000000000000000000000000000000000000000000000028160088110613c7e57613c7d615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110613cb457613cb3615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613cee906158c1565b915050613c26565b8260000160009054906101000a900460ff167f010000000000000000000000000000000000000000000000000000000000000002828281518110613d3d57613d3c615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613d77906158c1565b91505060005b8551811015613e4357858181518110613d9957613d98615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838284613df091906155f2565b81518110613e0157613e00615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613e3b906158c1565b915050613d7d565b5081935050505092915050565b60008060003073ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613eaa9190614d17565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190615e3a565b92508573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613f2557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614614059573373ffffffffffffffffffffffffffffffffffffffff166007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061404f57503373ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61405857600080fd5b5b60006007600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506140b68486614787565b600d60008581526020019081526020016000205491506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614118919061585e565b9050818111156141c857600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055505b6000600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614305919061585e565b925050819055506001600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461435c91906155f2565b92505081905550505050505050565b60008060008060007fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008960019004169350603067ffffffffffffffff8961ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16841793508665ffffffffffff1684179350836001029150600060010260056000848152602001908152602001600020541461440057600080fd5b85600001600c9054906101000a900460ff16614462578560000160069054906101000a900465ffffffffffff1665ffffffffffff168765ffffffffffff161461446157600186600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff896001900416925060b8839060020a0292507f8000000000000000000000000000000000000000000000000000000000000000831792508973ffffffffffffffffffffffffffffffffffffffff168317925060018660000160068282829054906101000a900465ffffffffffff166144e39190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555085600001600d9054906101000a900460ff166145645760018660000160008282829054906101000a900465ffffffffffff166145419190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055505b826001026005600084815260200190815260200160002081905550600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600d60008681526020019081526020016000208190555083600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461467e91906155f2565b9250508190555060068490806001815401808255809150506001900390600052602060002001600090919091909150558973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88660405161470b9190614d17565b60405180910390a38194505050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000808360010290506005600082815260200190815260200160002054600190049150600082036147b757600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060a00160405280600060ff168152602001600060ff168152602001600060ff16815260200160006fffffffffffffffffffffffffffffffff19168152602001600077ffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614903816148ce565b811461490e57600080fd5b50565b600081359050614920816148fa565b92915050565b60006020828403121561493c5761493b6148c4565b5b600061494a84828501614911565b91505092915050565b60008115159050919050565b61496881614953565b82525050565b6000602082019050614983600083018461495f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149c35780820151818401526020810190506149a8565b60008484015250505050565b6000601f19601f8301169050919050565b60006149eb82614989565b6149f58185614994565b9350614a058185602086016149a5565b614a0e816149cf565b840191505092915050565b60006020820190508181036000830152614a3381846149e0565b905092915050565b6000819050919050565b614a4e81614a3b565b8114614a5957600080fd5b50565b600081359050614a6b81614a45565b92915050565b600060208284031215614a8757614a866148c4565b5b6000614a9584828501614a5c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ac982614a9e565b9050919050565b614ad981614abe565b82525050565b6000602082019050614af46000830184614ad0565b92915050565b614b0381614abe565b8114614b0e57600080fd5b50565b600081359050614b2081614afa565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b68826149cf565b810181811067ffffffffffffffff82111715614b8757614b86614b30565b5b80604052505050565b6000614b9a6148ba565b9050614ba68282614b5f565b919050565b600067ffffffffffffffff821115614bc657614bc5614b30565b5b614bcf826149cf565b9050602081019050919050565b82818337600083830152505050565b6000614bfe614bf984614bab565b614b90565b905082815260208101848484011115614c1a57614c19614b2b565b5b614c25848285614bdc565b509392505050565b600082601f830112614c4257614c41614b26565b5b8135614c52848260208601614beb565b91505092915050565b60008060008060808587031215614c7557614c746148c4565b5b6000614c8387828801614b11565b9450506020614c9487828801614b11565b9350506040614ca587828801614a5c565b925050606085013567ffffffffffffffff811115614cc657614cc56148c9565b5b614cd287828801614c2d565b91505092959194509250565b614ce7816148ce565b82525050565b6000602082019050614d026000830184614cde565b92915050565b614d1181614a3b565b82525050565b6000602082019050614d2c6000830184614d08565b92915050565b600060ff82169050919050565b614d4881614d32565b8114614d5357600080fd5b50565b600081359050614d6581614d3f565b92915050565b600067ffffffffffffffff82169050919050565b614d8881614d6b565b8114614d9357600080fd5b50565b600081359050614da581614d7f565b92915050565b600067ffffffffffffffff821115614dc657614dc5614b30565b5b614dcf826149cf565b9050602081019050919050565b6000614def614dea84614dab565b614b90565b905082815260208101848484011115614e0b57614e0a614b2b565b5b614e16848285614bdc565b509392505050565b600082601f830112614e3357614e32614b26565b5b8135614e43848260208601614ddc565b91505092915050565b600080600060608486031215614e6557614e646148c4565b5b6000614e7386828701614d56565b9350506020614e8486828701614d96565b925050604084013567ffffffffffffffff811115614ea557614ea46148c9565b5b614eb186828701614e1e565b9150509250925092565b600080600060608486031215614ed457614ed36148c4565b5b6000614ee286828701614b11565b9350506020614ef386828701614b11565b9250506040614f0486828701614a5c565b9150509250925092565b6000819050919050565b614f2181614f0e565b8114614f2c57600080fd5b50565b600081359050614f3e81614f18565b92915050565b600060208284031215614f5a57614f596148c4565b5b6000614f6884828501614f2f565b91505092915050565b614f7a81614f0e565b82525050565b6000602082019050614f956000830184614f71565b92915050565b600060208284031215614fb157614fb06148c4565b5b6000614fbf84828501614b11565b91505092915050565b60008060408385031215614fdf57614fde6148c4565b5b6000614fed85828601614b11565b9250506020614ffe85828601614a5c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b600061502f82615008565b6150398185615013565b93506150498185602086016149a5565b615052816149cf565b840191505092915050565b600060208201905081810360008301526150778184615024565b905092915050565b600060208284031215615095576150946148c4565b5b600082013567ffffffffffffffff8111156150b3576150b26148c9565b5b6150bf84828501614e1e565b91505092915050565b6000602082840312156150de576150dd6148c4565b5b600082013567ffffffffffffffff8111156150fc576150fb6148c9565b5b61510884828501614c2d565b91505092915050565b60008060408385031215615128576151276148c4565b5b600061513685828601614f2f565b925050602061514785828601614a5c565b9150509250929050565b600065ffffffffffff82169050919050565b61516c81615151565b82525050565b60006080820190506151876000830187615163565b6151946020830186615163565b6151a1604083018561495f565b6151ae606083018461495f565b95945050505050565b6151c081614953565b81146151cb57600080fd5b50565b6000813590506151dd816151b7565b92915050565b600080604083850312156151fa576151f96148c4565b5b600061520885828601614b11565b9250506020615219858286016151ce565b9150509250929050565b61522c81614d32565b82525050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b61526781615232565b82525050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b6152a28161526d565b82525050565b600060a0820190506152bd6000830188615223565b6152ca6020830187615223565b6152d76040830186615223565b6152e4606083018561525e565b6152f16080830184615299565b9695505050505050565b60008060408385031215615312576153116148c4565b5b600061532085828601614b11565b925050602061533185828601614f2f565b9150509250929050565b600061ffff82169050919050565b6153528161533b565b811461535d57600080fd5b50565b60008135905061536f81615349565b92915050565b61537e81615151565b811461538957600080fd5b50565b60008135905061539b81615375565b92915050565b6000806000606084860312156153ba576153b96148c4565b5b60006153c886828701614f2f565b93505060206153d986828701615360565b92505060406153ea8682870161538c565b9150509250925092565b60008060006060848603121561540d5761540c6148c4565b5b600061541b86828701614b11565b935050602061542c86828701614f2f565b925050604061543d86828701615360565b9150509250925092565b6000806040838503121561545e5761545d6148c4565b5b600061546c85828601614b11565b925050602061547d85828601614b11565b9150509250929050565b600080600080608085870312156154a1576154a06148c4565b5b60006154af87828801614b11565b94505060206154c087828801614f2f565b93505060406154d187828801615360565b92505060606154e28782880161538c565b91505092959194509250565b60008160050b9050919050565b615504816154ee565b811461550f57600080fd5b50565b600081359050615521816154fb565b92915050565b6000806040838503121561553e5761553d6148c4565b5b600061554c85828601614f2f565b925050602061555d85828601615512565b9150509250929050565b6000806040838503121561557e5761557d6148c4565b5b600061558c85828601614a5c565b925050602083013567ffffffffffffffff8111156155ad576155ac6148c9565b5b6155b985828601614c2d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006155fd82614a3b565b915061560883614a3b565b92508282019050808211156156205761561f6155c3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061566d57607f821691505b6020821081036156805761567f615626565b5b50919050565b7f4552525f5052454649585f544f4f5f4c4f4e4700000000000000000000000000600082015250565b60006156bc601383614994565b91506156c782615686565b602082019050919050565b600060208201905081810360008301526156eb816156af565b9050919050565b60006156fd82614d32565b915061570883614d32565b925082820261571681614d32565b9150808214615728576157276155c3565b5b5092915050565b600061573a82614d32565b91506000820361574d5761574c6155c3565b5b600182039050919050565b600061576382614d32565b915061576e83614d32565b9250828201905060ff811115615787576157866155c3565b5b92915050565b600061579882614d32565b91506157a383614d32565b9250828203905060ff8111156157bc576157bb6155c3565b5b92915050565b6000819050602082019050919050565b60006157de8251615232565b80915050919050565b60008160020a8302905092915050565b600061580282615008565b8261580c846157c2565b9050615817816157d2565b92506010821015615857576158527fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008026157e7565b831692505b5050919050565b600061586982614a3b565b915061587483614a3b565b925082820390508181111561588c5761588b6155c3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006158cc82614a3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158fe576158fd6155c3565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60006008830261595e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826157e7565b61596886836157e7565b95508019841693508086168417925050509392505050565b6000819050919050565b60006159a56159a061599b84614a3b565b615980565b614a3b565b9050919050565b6000819050919050565b6159bf8361598a565b6159d36159cb826159ac565b84845461592e565b825550505050565b600090565b6159e86159db565b6159f38184846159b6565b505050565b5b81811015615a1757615a0c6000826159e0565b6001810190506159f9565b5050565b601f821115615a5c57615a2d81615909565b615a368461591e565b81016020851015615a45578190505b615a59615a518561591e565b8301826159f8565b50505b505050565b60008160020a8304905092915050565b6000615a8260001984600802615a61565b1980831691505092915050565b6000615a9b8383615a71565b9150826002028217905092915050565b615ab482615008565b67ffffffffffffffff811115615acd57615acc614b30565b5b615ad78254615655565b615ae2828285615a1b565b600060209050601f831160018114615b155760008415615b03578287015190505b615b0d8582615a8f565b865550615b75565b601f198416615b2386615909565b60005b82811015615b4b57848901518255600182019150602085019450602081019050615b26565b86831015615b685784890151615b64601f891682615a71565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000615bb3600a83614994565b9150615bbe82615b7d565b602082019050919050565b60006020820190508181036000830152615be281615ba6565b9050919050565b6000615bf58251614f0e565b80915050919050565b6000615c0982615008565b82615c13846157c2565b9050615c1e81615be9565b92506020821015615c5e57615c597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026157e7565b831692505b5050919050565b6000615c7082614a3b565b9150615c7b83614a3b565b9250828202615c8981614a3b565b91508282048414831517615ca057615c9f6155c3565b5b5092915050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b6000615cdd600a83614994565b9150615ce882615ca7565b602082019050919050565b60006020820190508181036000830152615d0c81615cd0565b9050919050565b7f4552525f43415050454400000000000000000000000000000000000000000000600082015250565b6000615d49600a83614994565b9150615d5482615d13565b602082019050919050565b60006020820190508181036000830152615d7881615d3c565b9050919050565b7f4552525f4341505f4c4f57000000000000000000000000000000000000000000600082015250565b6000615db5600b83614994565b9150615dc082615d7f565b602082019050919050565b60006020820190508181036000830152615de481615da8565b9050919050565b6000615df682615151565b9150615e0183615151565b9250828201905065ffffffffffff811115615e1f57615e1e6155c3565b5b92915050565b600081519050615e3481614afa565b92915050565b600060208284031215615e5057615e4f6148c4565b5b6000615e5e84828501615e25565b9150509291505056fea264697066735822122057149692e3048e7c6d84bd6b7240e87d4122f5ec3f1047997a8e3531d78bed8f64736f6c63430008120033
+\ No newline at end of file
diff --git a/js/contract/CraftNFT.metadata.json b/js/contract/CraftNFT.metadata.json
@@ -1 +1 @@
-{"compiler":{"version":"0.8.18+commit.87f61d96"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"uint48","name":"_count","type":"uint48"},{"indexed":true,"internalType":"bool","name":"_capped","type":"bool"},{"indexed":false,"internalType":"bytes32","name":"_tokenId","type":"bytes32"}],"name":"Allocate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","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":false,"internalType":"bytes","name":"_multiHash","type":"bytes"}],"name":"Msg","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"TransferWithData","type":"event"},{"inputs":[{"internalType":"uint8","name":"_length","type":"uint8"},{"internalType":"uint64","name":"_codecId","type":"uint64"},{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"addMultiCodec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"addWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"content","type":"bytes32"},{"internalType":"int48","name":"count","type":"int48"}],"name":"allocate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURL","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"deleteWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_truncatedId","type":"bytes32"}],"name":"getDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"getDigestHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMsg","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_index","type":"uint48"}],"name":"mintExactFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"}],"name":"mintFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"}],"name":"mintTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintedToken","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"multiHash","outputs":[{"internalType":"uint8","name":"l","type":"uint8"},{"internalType":"uint8","name":"codecRLength","type":"uint8"},{"internalType":"uint8","name":"prefixRLength","type":"uint8"},{"internalType":"bytes16","name":"prefix","type":"bytes16"},{"internalType":"bytes8","name":"codec","type":"bytes8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseString","type":"string"}],"name":"setBaseURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_cap","type":"uint48"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"setMsg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"}],"name":"setMsgCodec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","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":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"},{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"toMultiHash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"toURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"token","outputs":[{"internalType":"uint48","name":"count","type":"uint48"},{"internalType":"uint48","name":"cursor","type":"uint48"},{"internalType":"bool","name":"sparse","type":"bool"},{"internalType":"bool","name":"capped","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"CraftNFT.sol":"CraftNFT"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"CraftNFT.sol":{"keccak256":"0xbccc1e54e2e7b1362299f17b7b23f105049d2df89d67166687f9f585b3a51284","license":"GPL-3.0-or-later","urls":["bzz-raw://9114aeffe175607ed68bc21a2338ab2bf6670b0bb9aaf93b4b337377599f6483","dweb:/ipfs/QmRYcwho6pduS3RXLN3k9iHEFmEjun9iGoUEwiqpiyefHE"]}},"version":1}
+{"compiler":{"version":"0.8.18+commit.87f61d96"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"uint48","name":"_count","type":"uint48"},{"indexed":true,"internalType":"bool","name":"_capped","type":"bool"},{"indexed":false,"internalType":"bytes32","name":"_tokenId","type":"bytes32"}],"name":"Allocate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","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":false,"internalType":"bytes","name":"_multiHash","type":"bytes"}],"name":"Msg","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"TransferWithData","type":"event"},{"inputs":[{"internalType":"uint8","name":"_length","type":"uint8"},{"internalType":"uint64","name":"_codecId","type":"uint64"},{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"addMultiCodec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"addWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"content","type":"bytes32"},{"internalType":"int48","name":"count","type":"int48"}],"name":"allocate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURL","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"deleteWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_truncatedId","type":"bytes32"}],"name":"getDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"getDigestHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMsg","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_index","type":"uint48"}],"name":"mintExactFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"}],"name":"mintFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"}],"name":"mintTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintedToken","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"multiHash","outputs":[{"internalType":"uint8","name":"l","type":"uint8"},{"internalType":"uint8","name":"codecRLength","type":"uint8"},{"internalType":"uint8","name":"prefixRLength","type":"uint8"},{"internalType":"bytes16","name":"prefix","type":"bytes16"},{"internalType":"bytes8","name":"codec","type":"bytes8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseString","type":"string"}],"name":"setBaseURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_cap","type":"uint48"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"setMsg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"}],"name":"setMsgCodec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","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":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"},{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"toMultiHash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"toURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"token","outputs":[{"internalType":"uint48","name":"count","type":"uint48"},{"internalType":"uint48","name":"cursor","type":"uint48"},{"internalType":"bool","name":"sparse","type":"bool"},{"internalType":"bool","name":"capped","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"CraftNFT.sol":"CraftNFT"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"CraftNFT.sol":{"keccak256":"0x55bbad266f8bcd9d6f74a076b71da9f39d0a5a17e441b29d06b17200a4bc6038","license":"AGPL-3.0-or-later","urls":["bzz-raw://3ee20b4434e9d734873e866da3dae06a09ad440eb40f69d30e138269c924adc6","dweb:/ipfs/QmWzcWLsjrH5LQoiXLUyvcM3CDGgra5TTQwJDLhRaRBWCF"]}},"version":1}
diff --git a/python/CHANGELOG b/python/CHANGELOG
@@ -1,3 +1,6 @@
+- 0.1.0
+ * Change version
+ * Slim down EIP165 interface check
- 0.0.5
* Add contract metadata
- 0.0.4
diff --git a/python/craft_nft/data/CraftNFT.bin b/python/craft_nft/data/CraftNFT.bin
@@ -1 +1 @@
-60806040523480156200001157600080fd5b5060405162006c6038038062006c60833981810160405281019062000037919062000631565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816009908162000088919062000907565b5080600a90816200009a919062000907565b50620000ee602060126040518060400160405280600681526020017f736861323536000000000000000000000000000000000000000000000000000081525062000161640100000000026401000000009004565b6012601081905550602067ffffffffffffffff811115620001145762000113620004cd565b5b6040519080825280601f01601f191660200182016040528015620001475781602001600182028036833780820191505090505b506011908162000158919062000a5e565b50505062000db3565b6060819050601081511115620001ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a59062000ba6565b60405180910390fd5b620001b862000438565b6000600790505b60008160ff16106200021c576000600882620001dc919062000c04565b60ff1660ff9060020a029050600086821667ffffffffffffffff1611156200020557506200021c565b8180620002129062000c4a565b92505050620001bf565b6001816200022b919062000c78565b826020019060ff16908160ff168152505060088160076200024d919062000cb4565b62000259919062000c04565b60ff168567ffffffffffffffff169060020a02780100000000000000000000000000000000000000000000000002826080019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250508251826040019060ff16908160ff168152505082620002e79062000d43565b82606001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505085826000019060ff16908160ff168152505081600f60008767ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a8154816fffffffffffffffffffffffffffffffff02191690837001000000000000000000000000000000009004021790555060808201518160000160136101000a81548167ffffffffffffffff0219169083780100000000000000000000000000000000000000000000000090040217905550905050505050505050565b6040518060a00160405280600060ff168152602001600060ff168152602001600060ff16815260200160006fffffffffffffffffffffffffffffffff19168152602001600077ffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200050782620004bc565b810181811067ffffffffffffffff82111715620005295762000528620004cd565b5b80604052505050565b60006200053e6200049e565b90506200054c8282620004fc565b919050565b600067ffffffffffffffff8211156200056f576200056e620004cd565b5b6200057a82620004bc565b9050602081019050919050565b60005b83811015620005a75780820151818401526020810190506200058a565b60008484015250505050565b6000620005ca620005c48462000551565b62000532565b905082815260208101848484011115620005e957620005e8620004b7565b5b620005f684828562000587565b509392505050565b600082601f830112620006165762000615620004b2565b5b815162000628848260208601620005b3565b91505092915050565b600080604083850312156200064b576200064a620004a8565b5b600083015167ffffffffffffffff8111156200066c576200066b620004ad565b5b6200067a85828601620005fe565b925050602083015167ffffffffffffffff8111156200069e576200069d620004ad565b5b620006ac85828601620005fe565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070957607f821691505b6020821081036200071f576200071e620006c1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026200078c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200074a565b6200079886836200074a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007e5620007df620007d984620007b0565b620007ba565b620007b0565b9050919050565b6000819050919050565b6200080183620007c4565b620008196200081082620007ec565b8484546200075a565b825550505050565b600090565b6200083062000821565b6200083d818484620007f6565b505050565b5b8181101562000865576200085960008262000826565b60018101905062000843565b5050565b601f821115620008b4576200087e8162000725565b62000889846200073a565b8101602085101562000899578190505b620008b1620008a8856200073a565b83018262000842565b50505b505050565b60008160020a8304905092915050565b6000620008dc60001984600802620008b9565b1980831691505092915050565b6000620008f78383620008c9565b9150826002028217905092915050565b6200091282620006b6565b67ffffffffffffffff8111156200092e576200092d620004cd565b5b6200093a8254620006f0565b6200094782828562000869565b600060209050601f8311600181146200097f57600084156200096a578287015190505b620009768582620008e9565b865550620009e6565b601f1984166200098f8662000725565b60005b82811015620009b95784890151825560018201915060208501945060208101905062000992565b86831015620009d95784890151620009d5601f891682620008c9565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b60008190508160005260206000209050919050565b601f82111562000a595762000a2381620009f9565b62000a2e846200073a565b8101602085101562000a3e578190505b62000a5662000a4d856200073a565b83018262000842565b50505b505050565b62000a6982620009ee565b67ffffffffffffffff81111562000a855762000a84620004cd565b5b62000a918254620006f0565b62000a9e82828562000a0e565b600060209050601f83116001811462000ad6576000841562000ac1578287015190505b62000acd8582620008e9565b86555062000b3d565b601f19841662000ae686620009f9565b60005b8281101562000b105784890151825560018201915060208501945060208101905062000ae9565b8683101562000b30578489015162000b2c601f891682620008c9565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4552525f5052454649585f544f4f5f4c4f4e4700000000000000000000000000600082015250565b600062000b8e60138362000b45565b915062000b9b8262000b56565b602082019050919050565b6000602082019050818103600083015262000bc18162000b7f565b9050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c118262000bc8565b915062000c1e8362000bc8565b925082820262000c2e8162000bc8565b915080821462000c435762000c4262000bd5565b5b5092915050565b600062000c578262000bc8565b91506000820362000c6d5762000c6c62000bd5565b5b600182039050919050565b600062000c858262000bc8565b915062000c928362000bc8565b9250828201905060ff81111562000cae5762000cad62000bd5565b5b92915050565b600062000cc18262000bc8565b915062000cce8362000bc8565b9250828203905060ff81111562000cea5762000ce962000bd5565b5b92915050565b6000819050602082019050919050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b600062000d3a825162000d00565b80915050919050565b600062000d5082620009ee565b8262000d5c8462000cf0565b905062000d698162000d2c565b9250601082101562000dac5762000da77fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008026200074a565b831692505b5050919050565b615e9d8062000dc36000396000f3fe60806040526004361061026e576000357c01000000000000000000000000000000000000000000000000000000009004806386e90b5911610156578063c6eba7c4116100d3578063e985e9c511610097578063e985e9c51461099f578063f117e173146109dc578063f2fde38b14610a19578063f70a3de814610a56578063f9613ab214610a93578063f9f356e514610ad05761026e565b8063c6eba7c414610896578063c87b56dd146108bf578063d824ee4f146108fc578063da2824a814610939578063e8a7f4c5146109625761026e565b8063a5d6f2091161011a578063a5d6f20914610794578063adf288df146107d5578063b5fdeb2314610812578063b88d4fde1461083d578063c5bec6fc146108595761026e565b806386e90b59146106af5780638da5cb5b146106ec57806395d89b41146107175780639a7c5e9f14610742578063a22cb4651461076b5761026e565b806340c84b0e116101ef5780635344299a116101b35780635344299a14610566578063559f5dc91461058f5780635ae06f7e146105cf5780636352211e146105f85780636b9cb86a1461063557806370a08231146106725761026e565b806340c84b0e1461047c57806342842e0e146104a757806349f2553a146104c35780634f64b2be146104ec5780634f6ccce7146105295761026e565b80631f8cf649116102365780631f8cf6491461038057806323b872dd146103a957806324e0febc146103c55780632b29ba23146104025780632f745c591461043f5761026e565b806301ffc9a71461027357806306fdde03146102b0578063081812fc146102db578063150b7a021461031857806318160ddd14610355575b600080fd5b34801561027f57600080fd5b5061029a60048036038101906102959190614926565b610b0d565b6040516102a7919061496e565b60405180910390f35b3480156102bc57600080fd5b506102c5610c0c565b6040516102d29190614a19565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd9190614a71565b610c9a565b60405161030f9190614adf565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190614c5b565b610cd7565b60405161034c9190614ced565b60405180910390f35b34801561036157600080fd5b5061036a610d07565b6040516103779190614d17565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a29190614e4c565b610d14565b005b6103c360048036038101906103be9190614ebb565b610fd6565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190614f44565b611041565b6040516103f99190614f80565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190614f9b565b611059565b604051610436919061496e565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614fc8565b611105565b6040516104739190614d17565b60405180910390f35b34801561048857600080fd5b5061049161112a565b60405161049e919061505d565b60405180910390f35b6104c160048036038101906104bc9190614ebb565b6111b8565b005b3480156104cf57600080fd5b506104ea60048036038101906104e5919061507f565b611223565b005b3480156104f857600080fd5b50610513600480360381019061050e9190614a71565b61153b565b6040516105209190614f80565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b9190614a71565b61155f565b60405161055d9190614d17565b60405180910390f35b34801561057257600080fd5b5061058d600480360381019061058891906150c8565b611583565b005b34801561059b57600080fd5b506105b660048036038101906105b19190615111565b61160f565b6040516105c69493929190615172565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614f9b565b611696565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614a71565b6117b5565b60405161062c9190614adf565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906150c8565b6117f1565b6040516106699190614a19565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190614f9b565b611a0a565b6040516106a69190614d17565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906150c8565b611a53565b6040516106e39190614a19565b60405180910390f35b3480156106f857600080fd5b50610701611cfe565b60405161070e9190614adf565b60405180910390f35b34801561072357600080fd5b5061072c611d22565b6040516107399190614a19565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190614a71565b611db0565b005b34801561077757600080fd5b50610792600480360381019061078d91906151e3565b611ea1565b005b3480156107a057600080fd5b506107bb60048036038101906107b69190614a71565b612143565b6040516107cc9594939291906152a8565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906152fb565b6121e2565b6040516108099190614f80565b60405180910390f35b34801561081e57600080fd5b50610827612538565b604051610834919061505d565b60405180910390f35b61085760048036038101906108529190614c5b565b6125d5565b005b34801561086557600080fd5b50610880600480360381019061087b91906150c8565b6126b0565b60405161088d919061505d565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b891906153a1565b612a69565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190614a71565b612c21565b6040516108f39190614a19565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e91906153f4565b612d74565b6040516109309190614f80565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614f9b565b613019565b005b34801561096e57600080fd5b50610989600480360381019061098491906150c8565b613101565b604051610996919061505d565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190615447565b6134ba565b6040516109d3919061496e565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190615487565b613552565b604051610a109190614f80565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614f9b565b6136fc565b604051610a4d919061496e565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603810190610a789190615527565b6137a0565b604051610a8a919061496e565b60405180910390f35b348015610a9f57600080fd5b50610aba6004803603810190610ab59190614f44565b613ace565b604051610ac79190614f80565b60405180910390f35b348015610adc57600080fd5b50610af76004803603810190610af29190615567565b613b7a565b604051610b04919061505d565b60405180910390f35b6000806000837c0100000000000000000000000000000000000000000000000000000000900491506301ffc9a7847c0100000000000000000000000000000000000000000000000000000000900463ffffffff1603610b7157600192505050610c07565b60005b610100811015610bff5763ffffffff817fc22876c3d283ef1ddd9d2087150b7a02449a52f8abe1f1f5ed75b333f0440c0f908060020a820491505016915060008263ffffffff1603610bcc5760009350505050610c07565b8163ffffffff168363ffffffff1603610beb5760019350505050610c07565b602081610bf891906155f2565b9050610b74565b506000925050505b919050565b60098054610c1990615655565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4590615655565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b505050505081565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600063150b7a027c0100000000000000000000000000000000000000000000000000000000029050949350505050565b6000600680549050905090565b6060819050601081511115610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d55906156d2565b60405180910390fd5b610d66614818565b6000600790505b60008160ff1610610dc2576000600882610d8791906156f2565b60ff1660ff9060020a029050600086821667ffffffffffffffff161115610dae5750610dc2565b8180610db99061572f565b92505050610d6d565b600181610dcf9190615758565b826020019060ff16908160ff16815250506008816007610def919061578d565b610df991906156f2565b60ff168567ffffffffffffffff169060020a02780100000000000000000000000000000000000000000000000002826080019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250508251826040019060ff16908160ff168152505082610e85906157f7565b82606001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505085826000019060ff16908160ff168152505081600f60008767ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a8154816fffffffffffffffffffffffffffffffff02191690837001000000000000000000000000000000009004021790555060808201518160000160136101000a81548167ffffffffffffffff0219169083780100000000000000000000000000000000000000000000000090040217905550905050505050505050565b610fe1838383613e50565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110fe575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600c602052816000526040600020602052806000526040600020600091509150505481565b600b805461113790615655565b80601f016020809104026020016040519081016040528092919081815260200182805461116390615655565b80156111b05780601f10611185576101008083540402835291602001916111b0565b820191906000526020600020905b81548152906001019060200180831161119357829003601f168201915b505050505081565b6111c3838383613e50565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461128057600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836112b9919061585e565b815181106112ca576112c9615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461134a578080611346906158c1565b9150505b8067ffffffffffffffff81111561136457611363614b30565b5b6040519080825280601f01601f1916602001820160405280156113965781602001600182028036833780820191505090505b50600b90816113a59190615aab565b5060005b8251811015611496578281815181106113c5576113c4615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600b82815461141d90615655565b811061142c5761142b615892565b5b81546001161561144b5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f010000000000000000000000000000000000000000000000000000000000000084040217905550808061148e906158c1565b9150506113a9565b5081518114611536577f2f00000000000000000000000000000000000000000000000000000000000000600b835181546114cf90615655565b81106114de576114dd615892565b5b8154600116156114fd5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b6003818154811061154b57600080fd5b906000526020600020016000915090505481565b6006818154811061156f57600080fd5b906000526020600020016000915090505481565b6000600f6000601054815260200190815260200160002090508060000160009054906101000a900460ff1660ff168251146115bd57600080fd5b81601190816115cc9190615aab565b507f502ae868d71f78c5d099f033dd3007a4f58aebb3a2816544fe690f8b9604b56c6115f6612538565b604051611603919061505d565b60405180910390a15050565b6004602052816000526040600020818154811061162b57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff169080600001600d9054906101000a900460ff16905084565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061171b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190615bc9565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061180185613101565b9150600b805461181090615655565b9050905080825161182191906155f2565b67ffffffffffffffff81111561183a57611839614b30565b5b6040519080825280601f01601f19166020018201604052801561186c5781602001600182028036833780820191505090505b50925060005b8181101561193157600b81815461188890615655565b811061189757611896615892565b5b8154600116156118b65790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106118ef576118ee615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611929906158c1565b915050611872565b5060005b82518110156119fe5782818151811061195157611950615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106119ae576119ad615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806119e8906158c1565b92505080806119f6906158c1565b915050611935565b50829350505050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060006060806000611a65866126b0565b9150600f6000601054815260200190815260200160002093508360000160029054906101000a900460ff1660ff1690506001825182611aa491906155f2565b611aae91906155f2565b67ffffffffffffffff811115611ac757611ac6614b30565b5b6040519080825280601f01601f191660200182016040528015611af95781602001600182028036833780820191505090505b50925060005b81811015611bb3578460000160039054906101000a9004700100000000000000000000000000000000028160108110611b3b57611b3a615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002848281518110611b7157611b70615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611bab906158c1565b915050611aff565b50603a7f010000000000000000000000000000000000000000000000000000000000000002838281518110611beb57611bea615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611c25906158c1565b91505060005b8251811015611cf157828181518110611c4757611c46615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002848284611c9e91906155f2565b81518110611caf57611cae615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611ce9906158c1565b915050611c2b565b5082945050505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a8054611d2f90615655565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5b90615655565b8015611da85780601f10611d7d57610100808354040283529160200191611da8565b820191906000526020600020905b815481529060010190602001808311611d8b57829003601f168201915b505050505081565b6000600f6000838152602001908152602001600020905060008160000160009054906101000a900460ff1660ff1611611de857600080fd5b816010819055508060000160009054906101000a900460ff1660ff1667ffffffffffffffff811115611e1d57611e1c614b30565b5b6040519080825280601f01601f191660200182016040528015611e4f5781602001600182028036833780820191505090505b5060119081611e5e9190615aab565b507f502ae868d71f78c5d099f033dd3007a4f58aebb3a2816544fe690f8b9604b56c611e88612538565b604051611e95919061505d565b60405180910390a15050565b8015611fc257600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3f57600080fd5b81600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120da565b600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361205a57600080fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612137919061496e565b60405180910390a35050565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900470010000000000000000000000000000000002908060000160139054906101000a9004780100000000000000000000000000000000000000000000000002905085565b60008060008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061228b5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61229457600080fd5b60016004600087815260200190815260200160002080549050146122b757600080fd5b6000600460008781526020019081526020016000206000815481106122df576122de615892565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461231157600080fd5b600060010260056000878152602001908152602001600020541461233457600080fd5b8573ffffffffffffffffffffffffffffffffffffffff1692507fc0000000000000000000000000000000000000000000000000000000000000008317925082600102600560008781526020019081526020016000208190555084600190049150600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600d60008481526020019081526020016000208190555081600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249391906155f2565b925050819055506006856001900490806001815401808255809150506001900390600052602060002001600090919091909150558573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040516125249190614d17565b60405180910390a384935050505092915050565b60606125d06010546011805461254d90615655565b80601f016020809104026020016040519081016040528092919081815260200182805461257990615655565b80156125c65780601f1061259b576101008083540402835291602001916125c6565b820191906000526020600020905b8154815290600101906020018083116125a957829003601f168201915b5050505050613b7a565b905090565b6125e0848484613e50565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e8461269590615bfe565b6040516126a29190614f80565b60405180910390a450505050565b606080600080600285516126c49190615c65565b67ffffffffffffffff8111156126dd576126dc614b30565b5b6040519080825280601f01601f19166020018201604052801561270f5781602001600182028036833780820191505090505b5092506000905060005b6020811015612a5d57600460f087838151811061273957612738615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015612838576030836127cf9190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061280457612803615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506128aa565b6057836128459190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061287a57612879615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682815181106128bf576128be615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff1610156129bd576030836129489190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028460018461297891906155f2565b8151811061298957612988615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612a3b565b6057836129ca9190615758565b7f010000000000000000000000000000000000000000000000000000000000000002846001846129fa91906155f2565b81518110612a0b57612a0a615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282612a4891906155f2565b91508080612a55906158c1565b915050612719565b50829350505050919050565b6000600460008581526020019081526020016000208361ffff1681548110612a9457612a93615892565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae990615cf3565b60405180910390fd5b80600001600d9054906101000a900460ff1615612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b90615d5f565b60405180910390fd5b60008265ffffffffffff1603612b6e578060000160069054906101000a900465ffffffffffff1691505b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168265ffffffffffff161015612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce90615dcb565b60405180910390fd5b818160000160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550600181600001600d6101000a81548160ff02191690831515021790555050505050565b6060600060608360010291506000600460008481526020019081526020016000208054905003612c5757612c5482613ace565b91505b6000600460008481526020019081526020016000208054905011612c7a57600080fd5b602067ffffffffffffffff811115612c9557612c94614b30565b5b6040519080825280601f01601f191660200182016040528015612cc75781602001600182028036833780820191505090505b50905060005b6020811015612d6157828160208110612ce957612ce8615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110612d1f57612d1e615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612d59906158c1565b915050612ccd565b50612d6b816117f1565b92505050919050565b600080600460008581526020019081526020016000208361ffff1681548110612da057612d9f615892565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df590615cf3565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612ea15750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790615bc9565b60405180910390fd5b60008361ffff16148015612f12575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b8015612f2c575080600001600d9054906101000a900460ff165b15612f8b5760018160000160068282829054906101000a900465ffffffffffff16612f579190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550612f8385856121e2565b915050613012565b80600001600d9054906101000a900460ff1615612feb578060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff1610612fea57600080fd5b5b61300e8585858460000160069054906101000a900465ffffffffffff168561436b565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309e90615bc9565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606080600080600285516131159190615c65565b67ffffffffffffffff81111561312e5761312d614b30565b5b6040519080825280601f01601f1916602001820160405280156131605781602001600182028036833780820191505090505b5092506000905060005b60208110156134ae57600460f087838151811061318a57613189615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015613289576030836132209190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061325557613254615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506132fb565b6057836132969190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028483815181106132cb576132ca615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682815181106133105761330f615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff16101561340e576030836133999190615758565b7f010000000000000000000000000000000000000000000000000000000000000002846001846133c991906155f2565b815181106133da576133d9615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061348c565b60578361341b9190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028460018461344b91906155f2565b8151811061345c5761345b615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b60028261349991906155f2565b915080806134a6906158c1565b91505061316a565b50829350505050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff168154811061357e5761357d615892565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061362d5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366390615bc9565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff161161369757600080fd5b80600001600d9054906101000a900460ff166136b257600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff16106136e457600080fd5b6136f1868686868561436b565b915050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375757600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806138465750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387c90615bc9565b60405180910390fd5b61388d61487e565b60046000868152602001908152602001600020805490509150600082111561390a576000600460008781526020019081526020016000206000815481106138d7576138d6615892565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161161390957600080fd5b5b60008460050b0361392b576001816060019015159081151581525050613966565b60008460050b13156139655783816000019065ffffffffffff16908165ffffffffffff168152505060018160600190151590811515815250505b5b60046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff021916908315150217905550606082015181600001600d6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505580606001511515816000015165ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77d96978d8b40ac826d1984d992e71a84672e62d825fda78cd646656481d065b88604051613aba9190614f80565b60405180910390a460019250505092915050565b60008060056000848152602001908152602001600020549050613af081614723565b613af957600080fd5b613b0281614755565b15613b105782915050613b75565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b606060006060600f600086815260200190815260200160002091508160000160019054906101000a900460ff1660ff168260000160009054906101000a900460ff1660ff168551613bcb91906155f2565b613bd591906155f2565b67ffffffffffffffff811115613bee57613bed614b30565b5b6040519080825280601f01601f191660200182016040528015613c205781602001600182028036833780820191505090505b50905060005b8260000160019054906101000a900460ff1660ff16811015613cf6578260000160139054906101000a90047801000000000000000000000000000000000000000000000000028160088110613c7e57613c7d615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110613cb457613cb3615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613cee906158c1565b915050613c26565b8260000160009054906101000a900460ff167f010000000000000000000000000000000000000000000000000000000000000002828281518110613d3d57613d3c615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613d77906158c1565b91505060005b8551811015613e4357858181518110613d9957613d98615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838284613df091906155f2565b81518110613e0157613e00615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613e3b906158c1565b915050613d7d565b5081935050505092915050565b60008060003073ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613eaa9190614d17565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190615e3a565b92508573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613f2557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614614059573373ffffffffffffffffffffffffffffffffffffffff166007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061404f57503373ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61405857600080fd5b5b60006007600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506140b68486614787565b600d60008581526020019081526020016000205491506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614118919061585e565b9050818111156141c857600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055505b6000600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614305919061585e565b925050819055506001600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461435c91906155f2565b92505081905550505050505050565b60008060008060007fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008960019004169350603067ffffffffffffffff8961ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16841793508665ffffffffffff1684179350836001029150600060010260056000848152602001908152602001600020541461440057600080fd5b85600001600c9054906101000a900460ff16614462578560000160069054906101000a900465ffffffffffff1665ffffffffffff168765ffffffffffff161461446157600186600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff896001900416925060b8839060020a0292507f8000000000000000000000000000000000000000000000000000000000000000831792508973ffffffffffffffffffffffffffffffffffffffff168317925060018660000160068282829054906101000a900465ffffffffffff166144e39190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555085600001600d9054906101000a900460ff166145645760018660000160008282829054906101000a900465ffffffffffff166145419190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055505b826001026005600084815260200190815260200160002081905550600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600d60008681526020019081526020016000208190555083600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461467e91906155f2565b9250508190555060068490806001815401808255809150506001900390600052602060002001600090919091909150558973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88660405161470b9190614d17565b60405180910390a38194505050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000808360010290506005600082815260200190815260200160002054600190049150600082036147b757600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060a00160405280600060ff168152602001600060ff168152602001600060ff16815260200160006fffffffffffffffffffffffffffffffff19168152602001600077ffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614903816148ce565b811461490e57600080fd5b50565b600081359050614920816148fa565b92915050565b60006020828403121561493c5761493b6148c4565b5b600061494a84828501614911565b91505092915050565b60008115159050919050565b61496881614953565b82525050565b6000602082019050614983600083018461495f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149c35780820151818401526020810190506149a8565b60008484015250505050565b6000601f19601f8301169050919050565b60006149eb82614989565b6149f58185614994565b9350614a058185602086016149a5565b614a0e816149cf565b840191505092915050565b60006020820190508181036000830152614a3381846149e0565b905092915050565b6000819050919050565b614a4e81614a3b565b8114614a5957600080fd5b50565b600081359050614a6b81614a45565b92915050565b600060208284031215614a8757614a866148c4565b5b6000614a9584828501614a5c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ac982614a9e565b9050919050565b614ad981614abe565b82525050565b6000602082019050614af46000830184614ad0565b92915050565b614b0381614abe565b8114614b0e57600080fd5b50565b600081359050614b2081614afa565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b68826149cf565b810181811067ffffffffffffffff82111715614b8757614b86614b30565b5b80604052505050565b6000614b9a6148ba565b9050614ba68282614b5f565b919050565b600067ffffffffffffffff821115614bc657614bc5614b30565b5b614bcf826149cf565b9050602081019050919050565b82818337600083830152505050565b6000614bfe614bf984614bab565b614b90565b905082815260208101848484011115614c1a57614c19614b2b565b5b614c25848285614bdc565b509392505050565b600082601f830112614c4257614c41614b26565b5b8135614c52848260208601614beb565b91505092915050565b60008060008060808587031215614c7557614c746148c4565b5b6000614c8387828801614b11565b9450506020614c9487828801614b11565b9350506040614ca587828801614a5c565b925050606085013567ffffffffffffffff811115614cc657614cc56148c9565b5b614cd287828801614c2d565b91505092959194509250565b614ce7816148ce565b82525050565b6000602082019050614d026000830184614cde565b92915050565b614d1181614a3b565b82525050565b6000602082019050614d2c6000830184614d08565b92915050565b600060ff82169050919050565b614d4881614d32565b8114614d5357600080fd5b50565b600081359050614d6581614d3f565b92915050565b600067ffffffffffffffff82169050919050565b614d8881614d6b565b8114614d9357600080fd5b50565b600081359050614da581614d7f565b92915050565b600067ffffffffffffffff821115614dc657614dc5614b30565b5b614dcf826149cf565b9050602081019050919050565b6000614def614dea84614dab565b614b90565b905082815260208101848484011115614e0b57614e0a614b2b565b5b614e16848285614bdc565b509392505050565b600082601f830112614e3357614e32614b26565b5b8135614e43848260208601614ddc565b91505092915050565b600080600060608486031215614e6557614e646148c4565b5b6000614e7386828701614d56565b9350506020614e8486828701614d96565b925050604084013567ffffffffffffffff811115614ea557614ea46148c9565b5b614eb186828701614e1e565b9150509250925092565b600080600060608486031215614ed457614ed36148c4565b5b6000614ee286828701614b11565b9350506020614ef386828701614b11565b9250506040614f0486828701614a5c565b9150509250925092565b6000819050919050565b614f2181614f0e565b8114614f2c57600080fd5b50565b600081359050614f3e81614f18565b92915050565b600060208284031215614f5a57614f596148c4565b5b6000614f6884828501614f2f565b91505092915050565b614f7a81614f0e565b82525050565b6000602082019050614f956000830184614f71565b92915050565b600060208284031215614fb157614fb06148c4565b5b6000614fbf84828501614b11565b91505092915050565b60008060408385031215614fdf57614fde6148c4565b5b6000614fed85828601614b11565b9250506020614ffe85828601614a5c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b600061502f82615008565b6150398185615013565b93506150498185602086016149a5565b615052816149cf565b840191505092915050565b600060208201905081810360008301526150778184615024565b905092915050565b600060208284031215615095576150946148c4565b5b600082013567ffffffffffffffff8111156150b3576150b26148c9565b5b6150bf84828501614e1e565b91505092915050565b6000602082840312156150de576150dd6148c4565b5b600082013567ffffffffffffffff8111156150fc576150fb6148c9565b5b61510884828501614c2d565b91505092915050565b60008060408385031215615128576151276148c4565b5b600061513685828601614f2f565b925050602061514785828601614a5c565b9150509250929050565b600065ffffffffffff82169050919050565b61516c81615151565b82525050565b60006080820190506151876000830187615163565b6151946020830186615163565b6151a1604083018561495f565b6151ae606083018461495f565b95945050505050565b6151c081614953565b81146151cb57600080fd5b50565b6000813590506151dd816151b7565b92915050565b600080604083850312156151fa576151f96148c4565b5b600061520885828601614b11565b9250506020615219858286016151ce565b9150509250929050565b61522c81614d32565b82525050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b61526781615232565b82525050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b6152a28161526d565b82525050565b600060a0820190506152bd6000830188615223565b6152ca6020830187615223565b6152d76040830186615223565b6152e4606083018561525e565b6152f16080830184615299565b9695505050505050565b60008060408385031215615312576153116148c4565b5b600061532085828601614b11565b925050602061533185828601614f2f565b9150509250929050565b600061ffff82169050919050565b6153528161533b565b811461535d57600080fd5b50565b60008135905061536f81615349565b92915050565b61537e81615151565b811461538957600080fd5b50565b60008135905061539b81615375565b92915050565b6000806000606084860312156153ba576153b96148c4565b5b60006153c886828701614f2f565b93505060206153d986828701615360565b92505060406153ea8682870161538c565b9150509250925092565b60008060006060848603121561540d5761540c6148c4565b5b600061541b86828701614b11565b935050602061542c86828701614f2f565b925050604061543d86828701615360565b9150509250925092565b6000806040838503121561545e5761545d6148c4565b5b600061546c85828601614b11565b925050602061547d85828601614b11565b9150509250929050565b600080600080608085870312156154a1576154a06148c4565b5b60006154af87828801614b11565b94505060206154c087828801614f2f565b93505060406154d187828801615360565b92505060606154e28782880161538c565b91505092959194509250565b60008160050b9050919050565b615504816154ee565b811461550f57600080fd5b50565b600081359050615521816154fb565b92915050565b6000806040838503121561553e5761553d6148c4565b5b600061554c85828601614f2f565b925050602061555d85828601615512565b9150509250929050565b6000806040838503121561557e5761557d6148c4565b5b600061558c85828601614a5c565b925050602083013567ffffffffffffffff8111156155ad576155ac6148c9565b5b6155b985828601614c2d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006155fd82614a3b565b915061560883614a3b565b92508282019050808211156156205761561f6155c3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061566d57607f821691505b6020821081036156805761567f615626565b5b50919050565b7f4552525f5052454649585f544f4f5f4c4f4e4700000000000000000000000000600082015250565b60006156bc601383614994565b91506156c782615686565b602082019050919050565b600060208201905081810360008301526156eb816156af565b9050919050565b60006156fd82614d32565b915061570883614d32565b925082820261571681614d32565b9150808214615728576157276155c3565b5b5092915050565b600061573a82614d32565b91506000820361574d5761574c6155c3565b5b600182039050919050565b600061576382614d32565b915061576e83614d32565b9250828201905060ff811115615787576157866155c3565b5b92915050565b600061579882614d32565b91506157a383614d32565b9250828203905060ff8111156157bc576157bb6155c3565b5b92915050565b6000819050602082019050919050565b60006157de8251615232565b80915050919050565b60008160020a8302905092915050565b600061580282615008565b8261580c846157c2565b9050615817816157d2565b92506010821015615857576158527fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008026157e7565b831692505b5050919050565b600061586982614a3b565b915061587483614a3b565b925082820390508181111561588c5761588b6155c3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006158cc82614a3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158fe576158fd6155c3565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60006008830261595e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826157e7565b61596886836157e7565b95508019841693508086168417925050509392505050565b6000819050919050565b60006159a56159a061599b84614a3b565b615980565b614a3b565b9050919050565b6000819050919050565b6159bf8361598a565b6159d36159cb826159ac565b84845461592e565b825550505050565b600090565b6159e86159db565b6159f38184846159b6565b505050565b5b81811015615a1757615a0c6000826159e0565b6001810190506159f9565b5050565b601f821115615a5c57615a2d81615909565b615a368461591e565b81016020851015615a45578190505b615a59615a518561591e565b8301826159f8565b50505b505050565b60008160020a8304905092915050565b6000615a8260001984600802615a61565b1980831691505092915050565b6000615a9b8383615a71565b9150826002028217905092915050565b615ab482615008565b67ffffffffffffffff811115615acd57615acc614b30565b5b615ad78254615655565b615ae2828285615a1b565b600060209050601f831160018114615b155760008415615b03578287015190505b615b0d8582615a8f565b865550615b75565b601f198416615b2386615909565b60005b82811015615b4b57848901518255600182019150602085019450602081019050615b26565b86831015615b685784890151615b64601f891682615a71565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000615bb3600a83614994565b9150615bbe82615b7d565b602082019050919050565b60006020820190508181036000830152615be281615ba6565b9050919050565b6000615bf58251614f0e565b80915050919050565b6000615c0982615008565b82615c13846157c2565b9050615c1e81615be9565b92506020821015615c5e57615c597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026157e7565b831692505b5050919050565b6000615c7082614a3b565b9150615c7b83614a3b565b9250828202615c8981614a3b565b91508282048414831517615ca057615c9f6155c3565b5b5092915050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b6000615cdd600a83614994565b9150615ce882615ca7565b602082019050919050565b60006020820190508181036000830152615d0c81615cd0565b9050919050565b7f4552525f43415050454400000000000000000000000000000000000000000000600082015250565b6000615d49600a83614994565b9150615d5482615d13565b602082019050919050565b60006020820190508181036000830152615d7881615d3c565b9050919050565b7f4552525f4341505f4c4f57000000000000000000000000000000000000000000600082015250565b6000615db5600b83614994565b9150615dc082615d7f565b602082019050919050565b60006020820190508181036000830152615de481615da8565b9050919050565b6000615df682615151565b9150615e0183615151565b9250828201905065ffffffffffff811115615e1f57615e1e6155c3565b5b92915050565b600081519050615e3481614afa565b92915050565b600060208284031215615e5057615e4f6148c4565b5b6000615e5e84828501615e25565b9150509291505056fea264697066735822122060e4e28a0ccbc274f9028446f9345cf3cce292496cfa563a0b67d1374a8e763d64736f6c63430008120033
-\ No newline at end of file
+60806040523480156200001157600080fd5b5060405162006c6038038062006c60833981810160405281019062000037919062000631565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816009908162000088919062000907565b5080600a90816200009a919062000907565b50620000ee602060126040518060400160405280600681526020017f736861323536000000000000000000000000000000000000000000000000000081525062000161640100000000026401000000009004565b6012601081905550602067ffffffffffffffff811115620001145762000113620004cd565b5b6040519080825280601f01601f191660200182016040528015620001475781602001600182028036833780820191505090505b506011908162000158919062000a5e565b50505062000db3565b6060819050601081511115620001ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a59062000ba6565b60405180910390fd5b620001b862000438565b6000600790505b60008160ff16106200021c576000600882620001dc919062000c04565b60ff1660ff9060020a029050600086821667ffffffffffffffff1611156200020557506200021c565b8180620002129062000c4a565b92505050620001bf565b6001816200022b919062000c78565b826020019060ff16908160ff168152505060088160076200024d919062000cb4565b62000259919062000c04565b60ff168567ffffffffffffffff169060020a02780100000000000000000000000000000000000000000000000002826080019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250508251826040019060ff16908160ff168152505082620002e79062000d43565b82606001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505085826000019060ff16908160ff168152505081600f60008767ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a8154816fffffffffffffffffffffffffffffffff02191690837001000000000000000000000000000000009004021790555060808201518160000160136101000a81548167ffffffffffffffff0219169083780100000000000000000000000000000000000000000000000090040217905550905050505050505050565b6040518060a00160405280600060ff168152602001600060ff168152602001600060ff16815260200160006fffffffffffffffffffffffffffffffff19168152602001600077ffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200050782620004bc565b810181811067ffffffffffffffff82111715620005295762000528620004cd565b5b80604052505050565b60006200053e6200049e565b90506200054c8282620004fc565b919050565b600067ffffffffffffffff8211156200056f576200056e620004cd565b5b6200057a82620004bc565b9050602081019050919050565b60005b83811015620005a75780820151818401526020810190506200058a565b60008484015250505050565b6000620005ca620005c48462000551565b62000532565b905082815260208101848484011115620005e957620005e8620004b7565b5b620005f684828562000587565b509392505050565b600082601f830112620006165762000615620004b2565b5b815162000628848260208601620005b3565b91505092915050565b600080604083850312156200064b576200064a620004a8565b5b600083015167ffffffffffffffff8111156200066c576200066b620004ad565b5b6200067a85828601620005fe565b925050602083015167ffffffffffffffff8111156200069e576200069d620004ad565b5b620006ac85828601620005fe565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070957607f821691505b6020821081036200071f576200071e620006c1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026200078c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200074a565b6200079886836200074a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007e5620007df620007d984620007b0565b620007ba565b620007b0565b9050919050565b6000819050919050565b6200080183620007c4565b620008196200081082620007ec565b8484546200075a565b825550505050565b600090565b6200083062000821565b6200083d818484620007f6565b505050565b5b8181101562000865576200085960008262000826565b60018101905062000843565b5050565b601f821115620008b4576200087e8162000725565b62000889846200073a565b8101602085101562000899578190505b620008b1620008a8856200073a565b83018262000842565b50505b505050565b60008160020a8304905092915050565b6000620008dc60001984600802620008b9565b1980831691505092915050565b6000620008f78383620008c9565b9150826002028217905092915050565b6200091282620006b6565b67ffffffffffffffff8111156200092e576200092d620004cd565b5b6200093a8254620006f0565b6200094782828562000869565b600060209050601f8311600181146200097f57600084156200096a578287015190505b620009768582620008e9565b865550620009e6565b601f1984166200098f8662000725565b60005b82811015620009b95784890151825560018201915060208501945060208101905062000992565b86831015620009d95784890151620009d5601f891682620008c9565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b60008190508160005260206000209050919050565b601f82111562000a595762000a2381620009f9565b62000a2e846200073a565b8101602085101562000a3e578190505b62000a5662000a4d856200073a565b83018262000842565b50505b505050565b62000a6982620009ee565b67ffffffffffffffff81111562000a855762000a84620004cd565b5b62000a918254620006f0565b62000a9e82828562000a0e565b600060209050601f83116001811462000ad6576000841562000ac1578287015190505b62000acd8582620008e9565b86555062000b3d565b601f19841662000ae686620009f9565b60005b8281101562000b105784890151825560018201915060208501945060208101905062000ae9565b8683101562000b30578489015162000b2c601f891682620008c9565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4552525f5052454649585f544f4f5f4c4f4e4700000000000000000000000000600082015250565b600062000b8e60138362000b45565b915062000b9b8262000b56565b602082019050919050565b6000602082019050818103600083015262000bc18162000b7f565b9050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c118262000bc8565b915062000c1e8362000bc8565b925082820262000c2e8162000bc8565b915080821462000c435762000c4262000bd5565b5b5092915050565b600062000c578262000bc8565b91506000820362000c6d5762000c6c62000bd5565b5b600182039050919050565b600062000c858262000bc8565b915062000c928362000bc8565b9250828201905060ff81111562000cae5762000cad62000bd5565b5b92915050565b600062000cc18262000bc8565b915062000cce8362000bc8565b9250828203905060ff81111562000cea5762000ce962000bd5565b5b92915050565b6000819050602082019050919050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b600062000d3a825162000d00565b80915050919050565b600062000d5082620009ee565b8262000d5c8462000cf0565b905062000d698162000d2c565b9250601082101562000dac5762000da77fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008026200074a565b831692505b5050919050565b615e9d8062000dc36000396000f3fe60806040526004361061026e576000357c01000000000000000000000000000000000000000000000000000000009004806386e90b5911610156578063c6eba7c4116100d3578063e985e9c511610097578063e985e9c51461099f578063f117e173146109dc578063f2fde38b14610a19578063f70a3de814610a56578063f9613ab214610a93578063f9f356e514610ad05761026e565b8063c6eba7c414610896578063c87b56dd146108bf578063d824ee4f146108fc578063da2824a814610939578063e8a7f4c5146109625761026e565b8063a5d6f2091161011a578063a5d6f20914610794578063adf288df146107d5578063b5fdeb2314610812578063b88d4fde1461083d578063c5bec6fc146108595761026e565b806386e90b59146106af5780638da5cb5b146106ec57806395d89b41146107175780639a7c5e9f14610742578063a22cb4651461076b5761026e565b806340c84b0e116101ef5780635344299a116101b35780635344299a14610566578063559f5dc91461058f5780635ae06f7e146105cf5780636352211e146105f85780636b9cb86a1461063557806370a08231146106725761026e565b806340c84b0e1461047c57806342842e0e146104a757806349f2553a146104c35780634f64b2be146104ec5780634f6ccce7146105295761026e565b80631f8cf649116102365780631f8cf6491461038057806323b872dd146103a957806324e0febc146103c55780632b29ba23146104025780632f745c591461043f5761026e565b806301ffc9a71461027357806306fdde03146102b0578063081812fc146102db578063150b7a021461031857806318160ddd14610355575b600080fd5b34801561027f57600080fd5b5061029a60048036038101906102959190614926565b610b0d565b6040516102a7919061496e565b60405180910390f35b3480156102bc57600080fd5b506102c5610c0c565b6040516102d29190614a19565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd9190614a71565b610c9a565b60405161030f9190614adf565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190614c5b565b610cd7565b60405161034c9190614ced565b60405180910390f35b34801561036157600080fd5b5061036a610d07565b6040516103779190614d17565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a29190614e4c565b610d14565b005b6103c360048036038101906103be9190614ebb565b610fd6565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190614f44565b611041565b6040516103f99190614f80565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190614f9b565b611059565b604051610436919061496e565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614fc8565b611105565b6040516104739190614d17565b60405180910390f35b34801561048857600080fd5b5061049161112a565b60405161049e919061505d565b60405180910390f35b6104c160048036038101906104bc9190614ebb565b6111b8565b005b3480156104cf57600080fd5b506104ea60048036038101906104e5919061507f565b611223565b005b3480156104f857600080fd5b50610513600480360381019061050e9190614a71565b61153b565b6040516105209190614f80565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b9190614a71565b61155f565b60405161055d9190614d17565b60405180910390f35b34801561057257600080fd5b5061058d600480360381019061058891906150c8565b611583565b005b34801561059b57600080fd5b506105b660048036038101906105b19190615111565b61160f565b6040516105c69493929190615172565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614f9b565b611696565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614a71565b6117b5565b60405161062c9190614adf565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906150c8565b6117f1565b6040516106699190614a19565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190614f9b565b611a0a565b6040516106a69190614d17565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906150c8565b611a53565b6040516106e39190614a19565b60405180910390f35b3480156106f857600080fd5b50610701611cfe565b60405161070e9190614adf565b60405180910390f35b34801561072357600080fd5b5061072c611d22565b6040516107399190614a19565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190614a71565b611db0565b005b34801561077757600080fd5b50610792600480360381019061078d91906151e3565b611ea1565b005b3480156107a057600080fd5b506107bb60048036038101906107b69190614a71565b612143565b6040516107cc9594939291906152a8565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906152fb565b6121e2565b6040516108099190614f80565b60405180910390f35b34801561081e57600080fd5b50610827612538565b604051610834919061505d565b60405180910390f35b61085760048036038101906108529190614c5b565b6125d5565b005b34801561086557600080fd5b50610880600480360381019061087b91906150c8565b6126b0565b60405161088d919061505d565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b891906153a1565b612a69565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190614a71565b612c21565b6040516108f39190614a19565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e91906153f4565b612d74565b6040516109309190614f80565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614f9b565b613019565b005b34801561096e57600080fd5b50610989600480360381019061098491906150c8565b613101565b604051610996919061505d565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190615447565b6134ba565b6040516109d3919061496e565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190615487565b613552565b604051610a109190614f80565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614f9b565b6136fc565b604051610a4d919061496e565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603810190610a789190615527565b6137a0565b604051610a8a919061496e565b60405180910390f35b348015610a9f57600080fd5b50610aba6004803603810190610ab59190614f44565b613ace565b604051610ac79190614f80565b60405180910390f35b348015610adc57600080fd5b50610af76004803603810190610af29190615567565b613b7a565b604051610b04919061505d565b60405180910390f35b6000806000837c0100000000000000000000000000000000000000000000000000000000900491506301ffc9a7847c0100000000000000000000000000000000000000000000000000000000900463ffffffff1603610b7157600192505050610c07565b60005b610100811015610bff5763ffffffff817fc22876c3d283ef1ddd9d2087150b7a02449a52f8abe1f1f5ed75b333f0440c0f908060020a820491505016915060008263ffffffff1603610bcc5760009350505050610c07565b8163ffffffff168363ffffffff1603610beb5760019350505050610c07565b602081610bf891906155f2565b9050610b74565b506000925050505b919050565b60098054610c1990615655565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4590615655565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b505050505081565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600063150b7a027c0100000000000000000000000000000000000000000000000000000000029050949350505050565b6000600680549050905090565b6060819050601081511115610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d55906156d2565b60405180910390fd5b610d66614818565b6000600790505b60008160ff1610610dc2576000600882610d8791906156f2565b60ff1660ff9060020a029050600086821667ffffffffffffffff161115610dae5750610dc2565b8180610db99061572f565b92505050610d6d565b600181610dcf9190615758565b826020019060ff16908160ff16815250506008816007610def919061578d565b610df991906156f2565b60ff168567ffffffffffffffff169060020a02780100000000000000000000000000000000000000000000000002826080019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250508251826040019060ff16908160ff168152505082610e85906157f7565b82606001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505085826000019060ff16908160ff168152505081600f60008767ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a8154816fffffffffffffffffffffffffffffffff02191690837001000000000000000000000000000000009004021790555060808201518160000160136101000a81548167ffffffffffffffff0219169083780100000000000000000000000000000000000000000000000090040217905550905050505050505050565b610fe1838383613e50565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60056020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110fe575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600c602052816000526040600020602052806000526040600020600091509150505481565b600b805461113790615655565b80601f016020809104026020016040519081016040528092919081815260200182805461116390615655565b80156111b05780601f10611185576101008083540402835291602001916111b0565b820191906000526020600020905b81548152906001019060200180831161119357829003601f168201915b505050505081565b6111c3838383613e50565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461128057600080fd5b82915081519050602f7f010000000000000000000000000000000000000000000000000000000000000002826001836112b9919061585e565b815181106112ca576112c9615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461134a578080611346906158c1565b9150505b8067ffffffffffffffff81111561136457611363614b30565b5b6040519080825280601f01601f1916602001820160405280156113965781602001600182028036833780820191505090505b50600b90816113a59190615aab565b5060005b8251811015611496578281815181106113c5576113c4615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600b82815461141d90615655565b811061142c5761142b615892565b5b81546001161561144b5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f010000000000000000000000000000000000000000000000000000000000000084040217905550808061148e906158c1565b9150506113a9565b5081518114611536577f2f00000000000000000000000000000000000000000000000000000000000000600b835181546114cf90615655565b81106114de576114dd615892565b5b8154600116156114fd5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b6003818154811061154b57600080fd5b906000526020600020016000915090505481565b6006818154811061156f57600080fd5b906000526020600020016000915090505481565b6000600f6000601054815260200190815260200160002090508060000160009054906101000a900460ff1660ff168251146115bd57600080fd5b81601190816115cc9190615aab565b507f502ae868d71f78c5d099f033dd3007a4f58aebb3a2816544fe690f8b9604b56c6115f6612538565b604051611603919061505d565b60405180910390a15050565b6004602052816000526040600020818154811061162b57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff169080600001600d9054906101000a900460ff16905084565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061171b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190615bc9565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600560008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061180185613101565b9150600b805461181090615655565b9050905080825161182191906155f2565b67ffffffffffffffff81111561183a57611839614b30565b5b6040519080825280601f01601f19166020018201604052801561186c5781602001600182028036833780820191505090505b50925060005b8181101561193157600b81815461188890615655565b811061189757611896615892565b5b8154600116156118b65790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106118ef576118ee615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611929906158c1565b915050611872565b5060005b82518110156119fe5782818151811061195157611950615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106119ae576119ad615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806119e8906158c1565b92505080806119f6906158c1565b915050611935565b50829350505050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060006060806000611a65866126b0565b9150600f6000601054815260200190815260200160002093508360000160029054906101000a900460ff1660ff1690506001825182611aa491906155f2565b611aae91906155f2565b67ffffffffffffffff811115611ac757611ac6614b30565b5b6040519080825280601f01601f191660200182016040528015611af95781602001600182028036833780820191505090505b50925060005b81811015611bb3578460000160039054906101000a9004700100000000000000000000000000000000028160108110611b3b57611b3a615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002848281518110611b7157611b70615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611bab906158c1565b915050611aff565b50603a7f010000000000000000000000000000000000000000000000000000000000000002838281518110611beb57611bea615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611c25906158c1565b91505060005b8251811015611cf157828181518110611c4757611c46615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002848284611c9e91906155f2565b81518110611caf57611cae615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611ce9906158c1565b915050611c2b565b5082945050505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a8054611d2f90615655565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5b90615655565b8015611da85780601f10611d7d57610100808354040283529160200191611da8565b820191906000526020600020905b815481529060010190602001808311611d8b57829003601f168201915b505050505081565b6000600f6000838152602001908152602001600020905060008160000160009054906101000a900460ff1660ff1611611de857600080fd5b816010819055508060000160009054906101000a900460ff1660ff1667ffffffffffffffff811115611e1d57611e1c614b30565b5b6040519080825280601f01601f191660200182016040528015611e4f5781602001600182028036833780820191505090505b5060119081611e5e9190615aab565b507f502ae868d71f78c5d099f033dd3007a4f58aebb3a2816544fe690f8b9604b56c611e88612538565b604051611e95919061505d565b60405180910390a15050565b8015611fc257600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3f57600080fd5b81600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120da565b600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361205a57600080fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612137919061496e565b60405180910390a35050565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900470010000000000000000000000000000000002908060000160139054906101000a9004780100000000000000000000000000000000000000000000000002905085565b60008060008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061228b5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61229457600080fd5b60016004600087815260200190815260200160002080549050146122b757600080fd5b6000600460008781526020019081526020016000206000815481106122df576122de615892565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461231157600080fd5b600060010260056000878152602001908152602001600020541461233457600080fd5b8573ffffffffffffffffffffffffffffffffffffffff1692507fc0000000000000000000000000000000000000000000000000000000000000008317925082600102600560008781526020019081526020016000208190555084600190049150600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600d60008481526020019081526020016000208190555081600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249391906155f2565b925050819055506006856001900490806001815401808255809150506001900390600052602060002001600090919091909150558573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040516125249190614d17565b60405180910390a384935050505092915050565b60606125d06010546011805461254d90615655565b80601f016020809104026020016040519081016040528092919081815260200182805461257990615655565b80156125c65780601f1061259b576101008083540402835291602001916125c6565b820191906000526020600020905b8154815290600101906020018083116125a957829003601f168201915b5050505050613b7a565b905090565b6125e0848484613e50565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e8461269590615bfe565b6040516126a29190614f80565b60405180910390a450505050565b606080600080600285516126c49190615c65565b67ffffffffffffffff8111156126dd576126dc614b30565b5b6040519080825280601f01601f19166020018201604052801561270f5781602001600182028036833780820191505090505b5092506000905060005b6020811015612a5d57600460f087838151811061273957612738615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015612838576030836127cf9190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061280457612803615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506128aa565b6057836128459190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061287a57612879615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682815181106128bf576128be615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff1610156129bd576030836129489190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028460018461297891906155f2565b8151811061298957612988615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612a3b565b6057836129ca9190615758565b7f010000000000000000000000000000000000000000000000000000000000000002846001846129fa91906155f2565b81518110612a0b57612a0a615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282612a4891906155f2565b91508080612a55906158c1565b915050612719565b50829350505050919050565b6000600460008581526020019081526020016000208361ffff1681548110612a9457612a93615892565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae990615cf3565b60405180910390fd5b80600001600d9054906101000a900460ff1615612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b90615d5f565b60405180910390fd5b60008265ffffffffffff1603612b6e578060000160069054906101000a900465ffffffffffff1691505b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168265ffffffffffff161015612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce90615dcb565b60405180910390fd5b818160000160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550600181600001600d6101000a81548160ff02191690831515021790555050505050565b6060600060608360010291506000600460008481526020019081526020016000208054905003612c5757612c5482613ace565b91505b6000600460008481526020019081526020016000208054905011612c7a57600080fd5b602067ffffffffffffffff811115612c9557612c94614b30565b5b6040519080825280601f01601f191660200182016040528015612cc75781602001600182028036833780820191505090505b50905060005b6020811015612d6157828160208110612ce957612ce8615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110612d1f57612d1e615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612d59906158c1565b915050612ccd565b50612d6b816117f1565b92505050919050565b600080600460008581526020019081526020016000208361ffff1681548110612da057612d9f615892565b5b90600052602060002001905080600001600c9054906101000a900460ff1615612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df590615cf3565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612ea15750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790615bc9565b60405180910390fd5b60008361ffff16148015612f12575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b8015612f2c575080600001600d9054906101000a900460ff165b15612f8b5760018160000160068282829054906101000a900465ffffffffffff16612f579190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550612f8385856121e2565b915050613012565b80600001600d9054906101000a900460ff1615612feb578060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff1610612fea57600080fd5b5b61300e8585858460000160069054906101000a900465ffffffffffff168561436b565b9150505b9392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309e90615bc9565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606080600080600285516131159190615c65565b67ffffffffffffffff81111561312e5761312d614b30565b5b6040519080825280601f01601f1916602001820160405280156131605781602001600182028036833780820191505090505b5092506000905060005b60208110156134ae57600460f087838151811061318a57613189615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015613289576030836132209190615758565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061325557613254615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506132fb565b6057836132969190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028483815181106132cb576132ca615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682815181106133105761330f615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff16101561340e576030836133999190615758565b7f010000000000000000000000000000000000000000000000000000000000000002846001846133c991906155f2565b815181106133da576133d9615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061348c565b60578361341b9190615758565b7f0100000000000000000000000000000000000000000000000000000000000000028460018461344b91906155f2565b8151811061345c5761345b615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b60028261349991906155f2565b915080806134a6906158c1565b91505061316a565b50829350505050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600460008681526020019081526020016000208461ffff168154811061357e5761357d615892565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061362d5750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366390615bc9565b60405180910390fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff161161369757600080fd5b80600001600d9054906101000a900460ff166136b257600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff16106136e457600080fd5b6136f1868686868561436b565b915050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375757600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806138465750600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387c90615bc9565b60405180910390fd5b61388d61487e565b60046000868152602001908152602001600020805490509150600082111561390a576000600460008781526020019081526020016000206000815481106138d7576138d6615892565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161161390957600080fd5b5b60008460050b0361392b576001816060019015159081151581525050613966565b60008460050b13156139655783816000019065ffffffffffff16908165ffffffffffff168152505060018160600190151590811515815250505b5b60046000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff021916908315150217905550606082015181600001600d6101000a81548160ff0219169083151502179055505050600385908060018154018082558091505060019003906000526020600020016000909190919091505580606001511515816000015165ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77d96978d8b40ac826d1984d992e71a84672e62d825fda78cd646656481d065b88604051613aba9190614f80565b60405180910390a460019250505092915050565b60008060056000848152602001908152602001600020549050613af081614723565b613af957600080fd5b613b0281614755565b15613b105782915050613b75565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b606060006060600f600086815260200190815260200160002091508160000160019054906101000a900460ff1660ff168260000160009054906101000a900460ff1660ff168551613bcb91906155f2565b613bd591906155f2565b67ffffffffffffffff811115613bee57613bed614b30565b5b6040519080825280601f01601f191660200182016040528015613c205781602001600182028036833780820191505090505b50905060005b8260000160019054906101000a900460ff1660ff16811015613cf6578260000160139054906101000a90047801000000000000000000000000000000000000000000000000028160088110613c7e57613c7d615892565b5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110613cb457613cb3615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613cee906158c1565b915050613c26565b8260000160009054906101000a900460ff167f010000000000000000000000000000000000000000000000000000000000000002828281518110613d3d57613d3c615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613d77906158c1565b91505060005b8551811015613e4357858181518110613d9957613d98615892565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838284613df091906155f2565b81518110613e0157613e00615892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613e3b906158c1565b915050613d7d565b5081935050505092915050565b60008060003073ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613eaa9190614d17565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190615e3a565b92508573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613f2557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614614059573373ffffffffffffffffffffffffffffffffffffffff166007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061404f57503373ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61405857600080fd5b5b60006007600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506140b68486614787565b600d60008581526020019081526020016000205491506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614118919061585e565b9050818111156141c857600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055505b6000600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614305919061585e565b925050819055506001600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461435c91906155f2565b92505081905550505050505050565b60008060008060007fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008960019004169350603067ffffffffffffffff8961ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16841793508665ffffffffffff1684179350836001029150600060010260056000848152602001908152602001600020541461440057600080fd5b85600001600c9054906101000a900460ff16614462578560000160069054906101000a900465ffffffffffff1665ffffffffffff168765ffffffffffff161461446157600186600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff896001900416925060b8839060020a0292507f8000000000000000000000000000000000000000000000000000000000000000831792508973ffffffffffffffffffffffffffffffffffffffff168317925060018660000160068282829054906101000a900465ffffffffffff166144e39190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555085600001600d9054906101000a900460ff166145645760018660000160008282829054906101000a900465ffffffffffff166145419190615deb565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055505b826001026005600084815260200190815260200160002081905550600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600d60008681526020019081526020016000208190555083600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506001600e60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461467e91906155f2565b9250508190555060068490806001815401808255809150506001900390600052602060002001600090919091909150558973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88660405161470b9190614d17565b60405180910390a38194505050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000808360010290506005600082815260200190815260200160002054600190049150600082036147b757600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600560008381526020019081526020016000208190555050505050565b6040518060a00160405280600060ff168152602001600060ff168152602001600060ff16815260200160006fffffffffffffffffffffffffffffffff19168152602001600077ffffffffffffffffffffffffffffffffffffffffffffffff191681525090565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614903816148ce565b811461490e57600080fd5b50565b600081359050614920816148fa565b92915050565b60006020828403121561493c5761493b6148c4565b5b600061494a84828501614911565b91505092915050565b60008115159050919050565b61496881614953565b82525050565b6000602082019050614983600083018461495f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149c35780820151818401526020810190506149a8565b60008484015250505050565b6000601f19601f8301169050919050565b60006149eb82614989565b6149f58185614994565b9350614a058185602086016149a5565b614a0e816149cf565b840191505092915050565b60006020820190508181036000830152614a3381846149e0565b905092915050565b6000819050919050565b614a4e81614a3b565b8114614a5957600080fd5b50565b600081359050614a6b81614a45565b92915050565b600060208284031215614a8757614a866148c4565b5b6000614a9584828501614a5c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ac982614a9e565b9050919050565b614ad981614abe565b82525050565b6000602082019050614af46000830184614ad0565b92915050565b614b0381614abe565b8114614b0e57600080fd5b50565b600081359050614b2081614afa565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b68826149cf565b810181811067ffffffffffffffff82111715614b8757614b86614b30565b5b80604052505050565b6000614b9a6148ba565b9050614ba68282614b5f565b919050565b600067ffffffffffffffff821115614bc657614bc5614b30565b5b614bcf826149cf565b9050602081019050919050565b82818337600083830152505050565b6000614bfe614bf984614bab565b614b90565b905082815260208101848484011115614c1a57614c19614b2b565b5b614c25848285614bdc565b509392505050565b600082601f830112614c4257614c41614b26565b5b8135614c52848260208601614beb565b91505092915050565b60008060008060808587031215614c7557614c746148c4565b5b6000614c8387828801614b11565b9450506020614c9487828801614b11565b9350506040614ca587828801614a5c565b925050606085013567ffffffffffffffff811115614cc657614cc56148c9565b5b614cd287828801614c2d565b91505092959194509250565b614ce7816148ce565b82525050565b6000602082019050614d026000830184614cde565b92915050565b614d1181614a3b565b82525050565b6000602082019050614d2c6000830184614d08565b92915050565b600060ff82169050919050565b614d4881614d32565b8114614d5357600080fd5b50565b600081359050614d6581614d3f565b92915050565b600067ffffffffffffffff82169050919050565b614d8881614d6b565b8114614d9357600080fd5b50565b600081359050614da581614d7f565b92915050565b600067ffffffffffffffff821115614dc657614dc5614b30565b5b614dcf826149cf565b9050602081019050919050565b6000614def614dea84614dab565b614b90565b905082815260208101848484011115614e0b57614e0a614b2b565b5b614e16848285614bdc565b509392505050565b600082601f830112614e3357614e32614b26565b5b8135614e43848260208601614ddc565b91505092915050565b600080600060608486031215614e6557614e646148c4565b5b6000614e7386828701614d56565b9350506020614e8486828701614d96565b925050604084013567ffffffffffffffff811115614ea557614ea46148c9565b5b614eb186828701614e1e565b9150509250925092565b600080600060608486031215614ed457614ed36148c4565b5b6000614ee286828701614b11565b9350506020614ef386828701614b11565b9250506040614f0486828701614a5c565b9150509250925092565b6000819050919050565b614f2181614f0e565b8114614f2c57600080fd5b50565b600081359050614f3e81614f18565b92915050565b600060208284031215614f5a57614f596148c4565b5b6000614f6884828501614f2f565b91505092915050565b614f7a81614f0e565b82525050565b6000602082019050614f956000830184614f71565b92915050565b600060208284031215614fb157614fb06148c4565b5b6000614fbf84828501614b11565b91505092915050565b60008060408385031215614fdf57614fde6148c4565b5b6000614fed85828601614b11565b9250506020614ffe85828601614a5c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b600061502f82615008565b6150398185615013565b93506150498185602086016149a5565b615052816149cf565b840191505092915050565b600060208201905081810360008301526150778184615024565b905092915050565b600060208284031215615095576150946148c4565b5b600082013567ffffffffffffffff8111156150b3576150b26148c9565b5b6150bf84828501614e1e565b91505092915050565b6000602082840312156150de576150dd6148c4565b5b600082013567ffffffffffffffff8111156150fc576150fb6148c9565b5b61510884828501614c2d565b91505092915050565b60008060408385031215615128576151276148c4565b5b600061513685828601614f2f565b925050602061514785828601614a5c565b9150509250929050565b600065ffffffffffff82169050919050565b61516c81615151565b82525050565b60006080820190506151876000830187615163565b6151946020830186615163565b6151a1604083018561495f565b6151ae606083018461495f565b95945050505050565b6151c081614953565b81146151cb57600080fd5b50565b6000813590506151dd816151b7565b92915050565b600080604083850312156151fa576151f96148c4565b5b600061520885828601614b11565b9250506020615219858286016151ce565b9150509250929050565b61522c81614d32565b82525050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b61526781615232565b82525050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b6152a28161526d565b82525050565b600060a0820190506152bd6000830188615223565b6152ca6020830187615223565b6152d76040830186615223565b6152e4606083018561525e565b6152f16080830184615299565b9695505050505050565b60008060408385031215615312576153116148c4565b5b600061532085828601614b11565b925050602061533185828601614f2f565b9150509250929050565b600061ffff82169050919050565b6153528161533b565b811461535d57600080fd5b50565b60008135905061536f81615349565b92915050565b61537e81615151565b811461538957600080fd5b50565b60008135905061539b81615375565b92915050565b6000806000606084860312156153ba576153b96148c4565b5b60006153c886828701614f2f565b93505060206153d986828701615360565b92505060406153ea8682870161538c565b9150509250925092565b60008060006060848603121561540d5761540c6148c4565b5b600061541b86828701614b11565b935050602061542c86828701614f2f565b925050604061543d86828701615360565b9150509250925092565b6000806040838503121561545e5761545d6148c4565b5b600061546c85828601614b11565b925050602061547d85828601614b11565b9150509250929050565b600080600080608085870312156154a1576154a06148c4565b5b60006154af87828801614b11565b94505060206154c087828801614f2f565b93505060406154d187828801615360565b92505060606154e28782880161538c565b91505092959194509250565b60008160050b9050919050565b615504816154ee565b811461550f57600080fd5b50565b600081359050615521816154fb565b92915050565b6000806040838503121561553e5761553d6148c4565b5b600061554c85828601614f2f565b925050602061555d85828601615512565b9150509250929050565b6000806040838503121561557e5761557d6148c4565b5b600061558c85828601614a5c565b925050602083013567ffffffffffffffff8111156155ad576155ac6148c9565b5b6155b985828601614c2d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006155fd82614a3b565b915061560883614a3b565b92508282019050808211156156205761561f6155c3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061566d57607f821691505b6020821081036156805761567f615626565b5b50919050565b7f4552525f5052454649585f544f4f5f4c4f4e4700000000000000000000000000600082015250565b60006156bc601383614994565b91506156c782615686565b602082019050919050565b600060208201905081810360008301526156eb816156af565b9050919050565b60006156fd82614d32565b915061570883614d32565b925082820261571681614d32565b9150808214615728576157276155c3565b5b5092915050565b600061573a82614d32565b91506000820361574d5761574c6155c3565b5b600182039050919050565b600061576382614d32565b915061576e83614d32565b9250828201905060ff811115615787576157866155c3565b5b92915050565b600061579882614d32565b91506157a383614d32565b9250828203905060ff8111156157bc576157bb6155c3565b5b92915050565b6000819050602082019050919050565b60006157de8251615232565b80915050919050565b60008160020a8302905092915050565b600061580282615008565b8261580c846157c2565b9050615817816157d2565b92506010821015615857576158527fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008026157e7565b831692505b5050919050565b600061586982614a3b565b915061587483614a3b565b925082820390508181111561588c5761588b6155c3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006158cc82614a3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158fe576158fd6155c3565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60006008830261595e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826157e7565b61596886836157e7565b95508019841693508086168417925050509392505050565b6000819050919050565b60006159a56159a061599b84614a3b565b615980565b614a3b565b9050919050565b6000819050919050565b6159bf8361598a565b6159d36159cb826159ac565b84845461592e565b825550505050565b600090565b6159e86159db565b6159f38184846159b6565b505050565b5b81811015615a1757615a0c6000826159e0565b6001810190506159f9565b5050565b601f821115615a5c57615a2d81615909565b615a368461591e565b81016020851015615a45578190505b615a59615a518561591e565b8301826159f8565b50505b505050565b60008160020a8304905092915050565b6000615a8260001984600802615a61565b1980831691505092915050565b6000615a9b8383615a71565b9150826002028217905092915050565b615ab482615008565b67ffffffffffffffff811115615acd57615acc614b30565b5b615ad78254615655565b615ae2828285615a1b565b600060209050601f831160018114615b155760008415615b03578287015190505b615b0d8582615a8f565b865550615b75565b601f198416615b2386615909565b60005b82811015615b4b57848901518255600182019150602085019450602081019050615b26565b86831015615b685784890151615b64601f891682615a71565b8355505b6001600288020188555050505b505050505050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000615bb3600a83614994565b9150615bbe82615b7d565b602082019050919050565b60006020820190508181036000830152615be281615ba6565b9050919050565b6000615bf58251614f0e565b80915050919050565b6000615c0982615008565b82615c13846157c2565b9050615c1e81615be9565b92506020821015615c5e57615c597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026157e7565b831692505b5050919050565b6000615c7082614a3b565b9150615c7b83614a3b565b9250828202615c8981614a3b565b91508282048414831517615ca057615c9f6155c3565b5b5092915050565b7f4552525f53504152534500000000000000000000000000000000000000000000600082015250565b6000615cdd600a83614994565b9150615ce882615ca7565b602082019050919050565b60006020820190508181036000830152615d0c81615cd0565b9050919050565b7f4552525f43415050454400000000000000000000000000000000000000000000600082015250565b6000615d49600a83614994565b9150615d5482615d13565b602082019050919050565b60006020820190508181036000830152615d7881615d3c565b9050919050565b7f4552525f4341505f4c4f57000000000000000000000000000000000000000000600082015250565b6000615db5600b83614994565b9150615dc082615d7f565b602082019050919050565b60006020820190508181036000830152615de481615da8565b9050919050565b6000615df682615151565b9150615e0183615151565b9250828201905065ffffffffffff811115615e1f57615e1e6155c3565b5b92915050565b600081519050615e3481614afa565b92915050565b600060208284031215615e5057615e4f6148c4565b5b6000615e5e84828501615e25565b9150509291505056fea264697066735822122057149692e3048e7c6d84bd6b7240e87d4122f5ec3f1047997a8e3531d78bed8f64736f6c63430008120033
+\ No newline at end of file
diff --git a/python/craft_nft/data/CraftNFT.metadata.json b/python/craft_nft/data/CraftNFT.metadata.json
@@ -1 +1 @@
-{"compiler":{"version":"0.8.18+commit.87f61d96"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"uint48","name":"_count","type":"uint48"},{"indexed":true,"internalType":"bool","name":"_capped","type":"bool"},{"indexed":false,"internalType":"bytes32","name":"_tokenId","type":"bytes32"}],"name":"Allocate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","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":false,"internalType":"bytes","name":"_multiHash","type":"bytes"}],"name":"Msg","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"TransferWithData","type":"event"},{"inputs":[{"internalType":"uint8","name":"_length","type":"uint8"},{"internalType":"uint64","name":"_codecId","type":"uint64"},{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"addMultiCodec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"addWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"content","type":"bytes32"},{"internalType":"int48","name":"count","type":"int48"}],"name":"allocate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURL","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"deleteWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_truncatedId","type":"bytes32"}],"name":"getDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"getDigestHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMsg","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_index","type":"uint48"}],"name":"mintExactFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"}],"name":"mintFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"}],"name":"mintTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintedToken","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"multiHash","outputs":[{"internalType":"uint8","name":"l","type":"uint8"},{"internalType":"uint8","name":"codecRLength","type":"uint8"},{"internalType":"uint8","name":"prefixRLength","type":"uint8"},{"internalType":"bytes16","name":"prefix","type":"bytes16"},{"internalType":"bytes8","name":"codec","type":"bytes8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseString","type":"string"}],"name":"setBaseURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_cap","type":"uint48"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"setMsg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"}],"name":"setMsgCodec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","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":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"},{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"toMultiHash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"toURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"token","outputs":[{"internalType":"uint48","name":"count","type":"uint48"},{"internalType":"uint48","name":"cursor","type":"uint48"},{"internalType":"bool","name":"sparse","type":"bool"},{"internalType":"bool","name":"capped","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"CraftNFT.sol":"CraftNFT"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"CraftNFT.sol":{"keccak256":"0xbccc1e54e2e7b1362299f17b7b23f105049d2df89d67166687f9f585b3a51284","license":"GPL-3.0-or-later","urls":["bzz-raw://9114aeffe175607ed68bc21a2338ab2bf6670b0bb9aaf93b4b337377599f6483","dweb:/ipfs/QmRYcwho6pduS3RXLN3k9iHEFmEjun9iGoUEwiqpiyefHE"]}},"version":1}
+{"compiler":{"version":"0.8.18+commit.87f61d96"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"uint48","name":"_count","type":"uint48"},{"indexed":true,"internalType":"bool","name":"_capped","type":"bool"},{"indexed":false,"internalType":"bytes32","name":"_tokenId","type":"bytes32"}],"name":"Allocate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","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":false,"internalType":"bytes","name":"_multiHash","type":"bytes"}],"name":"Msg","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"TransferWithData","type":"event"},{"inputs":[{"internalType":"uint8","name":"_length","type":"uint8"},{"internalType":"uint64","name":"_codecId","type":"uint64"},{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"addMultiCodec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"addWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"content","type":"bytes32"},{"internalType":"int48","name":"count","type":"int48"}],"name":"allocate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURL","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"deleteWriter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_truncatedId","type":"bytes32"}],"name":"getDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"getDigestHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMsg","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_index","type":"uint48"}],"name":"mintExactFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"}],"name":"mintFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"}],"name":"mintTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintedToken","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"multiHash","outputs":[{"internalType":"uint8","name":"l","type":"uint8"},{"internalType":"uint8","name":"codecRLength","type":"uint8"},{"internalType":"uint8","name":"prefixRLength","type":"uint8"},{"internalType":"bytes16","name":"prefix","type":"bytes16"},{"internalType":"bytes8","name":"codec","type":"bytes8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseString","type":"string"}],"name":"setBaseURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_cap","type":"uint48"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"setMsg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"}],"name":"setMsgCodec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","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":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_codec","type":"uint256"},{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"toMultiHash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_digest","type":"bytes"}],"name":"toURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"token","outputs":[{"internalType":"uint48","name":"count","type":"uint48"},{"internalType":"uint48","name":"cursor","type":"uint48"},{"internalType":"bool","name":"sparse","type":"bool"},{"internalType":"bool","name":"capped","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"CraftNFT.sol":"CraftNFT"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"CraftNFT.sol":{"keccak256":"0x55bbad266f8bcd9d6f74a076b71da9f39d0a5a17e441b29d06b17200a4bc6038","license":"AGPL-3.0-or-later","urls":["bzz-raw://3ee20b4434e9d734873e866da3dae06a09ad440eb40f69d30e138269c924adc6","dweb:/ipfs/QmWzcWLsjrH5LQoiXLUyvcM3CDGgra5TTQwJDLhRaRBWCF"]}},"version":1}
diff --git a/python/setup.cfg b/python/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = craft-nft
-version = 0.0.5
+version = 0.1.0
description = A standalone NFT implementation for real-world arts and crafts assets
author = Louis Holbrook
author_email = dev@holbrook.no
diff --git a/solidity/CraftNFT.sol b/solidity/CraftNFT.sol
@@ -1,6 +1,6 @@
pragma solidity >= 0.8.0;
-// SPDX-License-Identifier: GPL-3.0-or-later
+// SPDX-License-Identifier: AGPL-3.0-or-later
contract CraftNFT {
// Defines the behavior of a single token batch.
@@ -63,12 +63,6 @@ contract CraftNFT {
// ERC-721 (Metadata - optional)
string public symbol;
- // The total Token Allocations across all tokens, regardless of whether they have been minted or not.
- //uint256 supply;
-
- // The digest of a human-readable resource that describes the rationale and terms for all tokens created by this contract.
- //bytes32 public declaration;
-
// Editable base URI against which to look up token data by token id
bytes public baseURL;