60806040526000600260146101000a81548160ff0219169083151502179055506009600555600554600a6200003591906200047a565b631dcd6500620000469190620004cb565b6006556000600755737a250d5630b4cf539739df2c5dacb4c659f2488d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601d81526020017f4172746966696369616c20496e74656c6c6967656e636520546f6b656e00000081525060099081620000e9919062000786565b506040518060400160405280600381526020017f4149540000000000000000000000000000000000000000000000000000000000815250600a908162000130919062000786565b503480156200013e57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600654600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051620002df91906200087e565b60405180910390a36200089b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200037b57808604811115620003535762000352620002ed565b5b6001851615620003635780820291505b808102905062000373856200031c565b945062000333565b94509492505050565b60008262000396576001905062000469565b81620003a6576000905062000469565b8160018114620003bf5760028114620003ca5762000400565b600191505062000469565b60ff841115620003df57620003de620002ed565b5b8360020a915084821115620003f957620003f8620002ed565b5b5062000469565b5060208310610133831016604e8410600b84101617156200043a5782820a905083811115620004345762000433620002ed565b5b62000469565b62000449848484600162000329565b92509050818404811115620004635762000462620002ed565b5b81810290505b9392505050565b6000819050919050565b6000620004878262000470565b9150620004948362000470565b9250620004c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000384565b905092915050565b6000620004d88262000470565b9150620004e58362000470565b9250828202620004f58162000470565b915082820484148315176200050f576200050e620002ed565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059857607f821691505b602082108103620005ae57620005ad62000550565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005d9565b620006248683620005d9565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000667620006616200065b8462000470565b6200063c565b62000470565b9050919050565b6000819050919050565b620006838362000646565b6200069b62000692826200066e565b848454620005e6565b825550505050565b600090565b620006b2620006a3565b620006bf81848462000678565b505050565b5b81811015620006e757620006db600082620006a8565b600181019050620006c5565b5050565b601f82111562000736576200070081620005b4565b6200070b84620005c9565b810160208510156200071b578190505b620007336200072a85620005c9565b830182620006c4565b50505b505050565b600082821c905092915050565b60006200075b600019846008026200073b565b1980831691505092915050565b600062000776838362000748565b9150826002028217905092915050565b620007918262000516565b67ffffffffffffffff811115620007ad57620007ac62000521565b5b620007b982546200057f565b620007c6828285620006eb565b600060209050601f831160018114620007fe5760008415620007e9578287015190505b620007f5858262000768565b86555062000865565b601f1984166200080e86620005b4565b60005b82811015620008385784890151825560018201915060208501945060208101905062000811565b8683101562000858578489015162000854601f89168262000748565b8355505b6001600288020188555050505b505050505050565b620008788162000470565b82525050565b60006020820190506200089560008301846200086d565b92915050565b6123da80620008ab6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a25780639601f96c116100715780639601f96c146102d3578063a457c2d714610303578063a9059cbb14610333578063c62b079514610363578063dd62ed3e1461039357610116565b806370a082311461025d578063715018a61461028d5780638da5cb5b1461029757806395d89b41146102b557610116565b806323b872dd116100e957806323b872dd146101a3578063313ce567146101d357806332424aa3146101f1578063395093511461020f5780633eaaf86b1461023f57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd1461016957806321bbcbb114610187575b600080fd5b6101236103c3565b60405161013091906119c0565b60405180910390f35b610153600480360381019061014e9190611a80565b610455565b6040516101609190611adb565b60405180910390f35b61017161046c565b60405161017e9190611b05565b60405180910390f35b6101a1600480360381019061019c9190611b85565b610476565b005b6101bd60048036038101906101b89190611bd2565b61058f565b6040516101ca9190611adb565b60405180910390f35b6101db610630565b6040516101e89190611b05565b60405180910390f35b6101f961063a565b6040516102069190611b05565b60405180910390f35b61022960048036038101906102249190611a80565b610640565b6040516102369190611adb565b60405180910390f35b6102476106de565b6040516102549190611b05565b60405180910390f35b61027760048036038101906102729190611c25565b6106e4565b6040516102849190611b05565b60405180910390f35b61029561072d565b005b61029f610860565b6040516102ac9190611c61565b60405180910390f35b6102bd610889565b6040516102ca91906119c0565b60405180910390f35b6102ed60048036038101906102e89190611c7c565b61091b565b6040516102fa9190611adb565b60405180910390f35b61031d60048036038101906103189190611a80565b610969565b60405161032a9190611adb565b60405180910390f35b61034d60048036038101906103489190611a80565b610a90565b60405161035a9190611adb565b60405180910390f35b61037d60048036038101906103789190611cbc565b610aa7565b60405161038a9190611adb565b60405180910390f35b6103ad60048036038101906103a89190611c7c565b610bfe565b6040516103ba9190611b05565b60405180910390f35b6060600980546103d290611d3e565b80601f01602080910402602001604051908101604052809291908181526020018280546103fe90611d3e565b801561044b5780601f106104205761010080835404028352916020019161044b565b820191906000526020600020905b81548152906001019060200180831161042e57829003601f168201915b5050505050905090565b6000610462338484610c85565b6001905092915050565b6000600654905090565b3373ffffffffffffffffffffffffffffffffffffffff16610495610860565b73ffffffffffffffffffffffffffffffffffffffff16146104eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e290611dbb565b60405180910390fd5b60005b8282905081101561058a57600180600085858581811061051157610510611ddb565b5b90506020020160208101906105269190611c25565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061058290611e39565b9150506104ee565b505050565b600061059c848484610e4e565b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561062557600080fd5b600190509392505050565b6000600554905090565b60055481565b60006106d4338484600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106cf9190611e81565b610c85565b6001905092915050565b60065481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff1661074c610860565b73ffffffffffffffffffffffffffffffffffffffff16146107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079990611dbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461089890611d3e565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490611d3e565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b5050505050905090565b600061092682611094565b610931576000610961565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156109f457600080fd5b610a86338484600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a819190611eb5565b610c85565b6001905092915050565b6000610a9d338484610e4e565b6001905092915050565b600080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610b4e5750600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9050808015610b6a5750600260149054906101000a900460ff16155b8015610ba257508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15610bf25783600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001915050610bf7565b809150505b9392505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90611f5b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90611fed565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e419190611b05565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e8757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ec057600080fd5b610eca838361091b565b15610ede57610ed981836110ea565b61108f565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610f2a57600080fd5b6000610f378484846113b4565b905081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f849190611eb5565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508082610fd39190611eb5565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110219190611e81565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110859190611b05565b60405180910390a3505b505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61111730600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610c85565b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff8111156111785761117761200d565b5b6040519080825280602002602001820160405280156111a65781602001602082028036833780820191505090505b5090506001600260146101000a81548160ff02191690831515021790555030816000815181106111d9576111d8611ddb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a49190612051565b816001815181106112b8576112b7611ddb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486601e426113429190611e81565b6040518663ffffffff1660e01b8152600401611362959493929190612181565b600060405180830381600087803b15801561137c57600080fd5b505af1158015611390573d6000803e3d6000fd5b505050506000600260146101000a81548160ff021916908315150217905550505050565b600080600090506113c48561146e565b60036000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611433858561164c565b15611463576114606064611452600754866117fc90919063ffffffff16565b61187690919063ffffffff16565b90505b809150509392505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190612051565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115af9190612051565b6040518363ffffffff1660e01b81526004016115cc9291906121db565b602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d9190612051565b9050611644838261163f600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166106e4565b6118d4565b915050919050565b60006117f48383600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e49190612051565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117919190612051565b6040518363ffffffff1660e01b81526004016117ae9291906121db565b602060405180830381865afa1580156117cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ef9190612051565b610aa7565b905092915050565b600080830361180e5760009050611870565b6000828461181c9190612204565b905082848261182b9190612275565b1461186b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186290612318565b60405180910390fd5b809150505b92915050565b60008082116118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190612384565b60405180910390fd5b600082846118c89190612275565b90508091505092915050565b6000808290508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461191557829050611925565b6000816119229190612204565b90505b809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561196a57808201518184015260208101905061194f565b60008484015250505050565b6000601f19601f8301169050919050565b600061199282611930565b61199c818561193b565b93506119ac81856020860161194c565b6119b581611976565b840191505092915050565b600060208201905081810360008301526119da8184611987565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a17826119ec565b9050919050565b611a2781611a0c565b8114611a3257600080fd5b50565b600081359050611a4481611a1e565b92915050565b6000819050919050565b611a5d81611a4a565b8114611a6857600080fd5b50565b600081359050611a7a81611a54565b92915050565b60008060408385031215611a9757611a966119e2565b5b6000611aa585828601611a35565b9250506020611ab685828601611a6b565b9150509250929050565b60008115159050919050565b611ad581611ac0565b82525050565b6000602082019050611af06000830184611acc565b92915050565b611aff81611a4a565b82525050565b6000602082019050611b1a6000830184611af6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611b4557611b44611b20565b5b8235905067ffffffffffffffff811115611b6257611b61611b25565b5b602083019150836020820283011115611b7e57611b7d611b2a565b5b9250929050565b60008060208385031215611b9c57611b9b6119e2565b5b600083013567ffffffffffffffff811115611bba57611bb96119e7565b5b611bc685828601611b2f565b92509250509250929050565b600080600060608486031215611beb57611bea6119e2565b5b6000611bf986828701611a35565b9350506020611c0a86828701611a35565b9250506040611c1b86828701611a6b565b9150509250925092565b600060208284031215611c3b57611c3a6119e2565b5b6000611c4984828501611a35565b91505092915050565b611c5b81611a0c565b82525050565b6000602082019050611c766000830184611c52565b92915050565b60008060408385031215611c9357611c926119e2565b5b6000611ca185828601611a35565b9250506020611cb285828601611a35565b9150509250929050565b600080600060608486031215611cd557611cd46119e2565b5b6000611ce386828701611a35565b9350506020611cf486828701611a35565b9250506040611d0586828701611a35565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d5657607f821691505b602082108103611d6957611d68611d0f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611da560208361193b565b9150611db082611d6f565b602082019050919050565b60006020820190508181036000830152611dd481611d98565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e4482611a4a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e7657611e75611e0a565b5b600182019050919050565b6000611e8c82611a4a565b9150611e9783611a4a565b9250828201905080821115611eaf57611eae611e0a565b5b92915050565b6000611ec082611a4a565b9150611ecb83611a4a565b9250828203905081811115611ee357611ee2611e0a565b5b92915050565b7f4945524332303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611f4560258361193b565b9150611f5082611ee9565b604082019050919050565b60006020820190508181036000830152611f7481611f38565b9050919050565b7f4945524332303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611fd760238361193b565b9150611fe282611f7b565b604082019050919050565b6000602082019050818103600083015261200681611fca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061204b81611a1e565b92915050565b600060208284031215612067576120666119e2565b5b60006120758482850161203c565b91505092915050565b6000819050919050565b6000819050919050565b60006120ad6120a86120a38461207e565b612088565b611a4a565b9050919050565b6120bd81612092565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120f881611a0c565b82525050565b600061210a83836120ef565b60208301905092915050565b6000602082019050919050565b600061212e826120c3565b61213881856120ce565b9350612143836120df565b8060005b8381101561217457815161215b88826120fe565b975061216683612116565b925050600181019050612147565b5085935050505092915050565b600060a0820190506121966000830188611af6565b6121a360208301876120b4565b81810360408301526121b58186612123565b90506121c46060830185611c52565b6121d16080830184611af6565b9695505050505050565b60006040820190506121f06000830185611c52565b6121fd6020830184611c52565b9392505050565b600061220f82611a4a565b915061221a83611a4a565b925082820261222881611a4a565b9150828204841483151761223f5761223e611e0a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061228082611a4a565b915061228b83611a4a565b92508261229b5761229a612246565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061230260218361193b565b915061230d826122a6565b604082019050919050565b60006020820190508181036000830152612331816122f5565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000600082015250565b600061236e601a8361193b565b915061237982612338565b602082019050919050565b6000602082019050818103600083015261239d81612361565b905091905056fea264697066735822122038a12b4f3adb11d48ee6815a277451a44786c08a38d74fc97cdd315d463609fd64736f6c63430008110033