60806040526b033b2e3c9fd0803ce80000006006553480156200002157600080fd5b506040518060400160405280601581526020017f4d616b652042616c6420477265617420416761696e00000000000000000000008152506040518060400160405280600481526020017f42414c4400000000000000000000000000000000000000000000000000000000815250620000ae620000a26200011f60201b60201c565b6200012760201b60201c565b8160049081620000bf919062000774565b508060059081620000d1919062000774565b505050620000f7620000e86200011f60201b60201c565b600654620001eb60201b60201c565b620001196200010b6200011f60201b60201c565b60016200035960201b60201c565b62000a5a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200025d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025490620008bc565b60405180910390fd5b62000271600083836200043660201b60201c565b80600360008282546200028591906200090d565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000339919062000959565b60405180910390a362000355600083836200043b60201b60201c565b5050565b620003696200044060201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d290620009c6565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b505050565b505050565b620004506200011f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000476620004d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c69062000a38565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200057c57607f821691505b60208210810362000592576200059162000534565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005bd565b620006088683620005bd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006556200064f620006498462000620565b6200062a565b62000620565b9050919050565b6000819050919050565b620006718362000634565b6200068962000680826200065c565b848454620005ca565b825550505050565b600090565b620006a062000691565b620006ad81848462000666565b505050565b5b81811015620006d557620006c960008262000696565b600181019050620006b3565b5050565b601f8211156200072457620006ee8162000598565b620006f984620005ad565b8101602085101562000709578190505b620007216200071885620005ad565b830182620006b2565b50505b505050565b600082821c905092915050565b6000620007496000198460080262000729565b1980831691505092915050565b600062000764838362000736565b9150826002028217905092915050565b6200077f82620004fa565b67ffffffffffffffff8111156200079b576200079a62000505565b5b620007a7825462000563565b620007b4828285620006d9565b600060209050601f831160018114620007ec5760008415620007d7578287015190505b620007e3858262000756565b86555062000853565b601f198416620007fc8662000598565b60005b828110156200082657848901518255600182019150602085019450602081019050620007ff565b8683101562000846578489015162000842601f89168262000736565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620008a4601f836200085b565b9150620008b1826200086c565b602082019050919050565b60006020820190508181036000830152620008d78162000895565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200091a8262000620565b9150620009278362000620565b9250828201905080821115620009425762000941620008de565b5b92915050565b620009538162000620565b82525050565b600060208201905062000970600083018462000948565b92915050565b7f696e76616c69642062616c642e00000000000000000000000000000000000000600082015250565b6000620009ae600d836200085b565b9150620009bb8262000976565b602082019050919050565b60006020820190508181036000830152620009e1816200099f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000a206020836200085b565b915062000a2d82620009e8565b602082019050919050565b6000602082019050818103600083015262000a538162000a11565b9050919050565b6121af8062000a6a6000396000f3fe60806040526004361061012e5760003560e01c80638576708a116100ab578063abafd4661161006f578063abafd46614610425578063c7426a9114610462578063d7f40c761461049f578063dd62ed3e146104c8578063e66738cd14610505578063f2fde38b1461053057610135565b80638576708a1461032c5780638da5cb5b1461035557806395d89b4114610380578063a457c2d7146103ab578063a9059cbb146103e857610135565b8063313ce567116100f2578063313ce56714610247578063395093511461027257806342966c68146102af57806370a08231146102d8578063715018a61461031557610135565b806301cba4b21461013a57806306fdde0314610177578063095ea7b3146101a257806318160ddd146101df57806323b872dd1461020a57610135565b3661013557005b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190611519565b610559565b60405161016e9190611561565b60405180910390f35b34801561018357600080fd5b5061018c610579565b604051610199919061160c565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190611664565b61060b565b6040516101d69190611561565b60405180910390f35b3480156101eb57600080fd5b506101f461062e565b60405161020191906116b3565b60405180910390f35b34801561021657600080fd5b50610231600480360381019061022c91906116ce565b610638565b60405161023e9190611561565b60405180910390f35b34801561025357600080fd5b5061025c610667565b604051610269919061173d565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190611664565b610670565b6040516102a69190611561565b60405180910390f35b3480156102bb57600080fd5b506102d660048036038101906102d19190611758565b6106a7565b005b3480156102e457600080fd5b506102ff60048036038101906102fa9190611519565b6106bb565b60405161030c91906116b3565b60405180910390f35b34801561032157600080fd5b5061032a610704565b005b34801561033857600080fd5b50610353600480360381019061034e91906117b1565b610718565b005b34801561036157600080fd5b5061036a6107ea565b6040516103779190611800565b60405180910390f35b34801561038c57600080fd5b50610395610813565b6040516103a2919061160c565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190611664565b6108a5565b6040516103df9190611561565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190611664565b61091c565b60405161041c9190611561565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190611519565b61093f565b6040516104599190611561565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190611519565b61095f565b6040516104969190611561565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190611880565b61097f565b005b3480156104d457600080fd5b506104ef60048036038101906104ea91906118e0565b610abd565b6040516104fc91906116b3565b60405180910390f35b34801561051157600080fd5b5061051a610b44565b60405161052791906116b3565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190611519565b610b4a565b005b60086020528060005260406000206000915054906101000a900460ff1681565b6060600480546105889061194f565b80601f01602080910402602001604051908101604052809291908181526020018280546105b49061194f565b80156106015780601f106105d657610100808354040283529160200191610601565b820191906000526020600020905b8154815290600101906020018083116105e457829003601f168201915b5050505050905090565b600080610616610bcd565b9050610623818585610bd5565b600191505092915050565b6000600354905090565b600080610643610bcd565b9050610650858285610d9e565b61065b858585610e2a565b60019150509392505050565b60006012905090565b60008061067b610bcd565b905061069c81858561068d8589610abd565b61069791906119af565b610bd5565b600191505092915050565b6106b86106b2610bcd565b82610f1d565b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61070c6110ec565b610716600061116a565b565b6107206110ec565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078690611a2f565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546108229061194f565b80601f016020809104026020016040519081016040528092919081815260200182805461084e9061194f565b801561089b5780601f106108705761010080835404028352916020019161089b565b820191906000526020600020905b81548152906001019060200180831161087e57829003601f168201915b5050505050905090565b6000806108b0610bcd565b905060006108be8286610abd565b905083811015610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90611ac1565b60405180910390fd5b6109108286868403610bd5565b60019250505092915050565b600080610927610bcd565b9050610934818585610e2a565b600191505092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b6009600061098b610bcd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0990611b2d565b60405180910390fd5b60005b838390508160ff161015610ab757816007600086868560ff16818110610a3e57610a3d611b4d565b5b9050602002016020810190610a539190611519565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610aaf90611b7c565b915050610a15565b50505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b610b526110ec565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890611c17565b60405180910390fd5b610bca8161116a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90611ca9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90611d3b565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610d9191906116b3565b60405180910390a3505050565b6000610daa8484610abd565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e245781811015610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90611da7565b60405180910390fd5b610e238484848403610bd5565b5b50505050565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610ece5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490611e13565b60405180910390fd5b610f1883838361122e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390611ea5565b60405180910390fd5b610f98826000836114a7565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690611f37565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110d391906116b3565b60405180910390a36110e7836000846114ac565b505050565b6110f4610bcd565b73ffffffffffffffffffffffffffffffffffffffff166111126107ea565b73ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90611fa3565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490612035565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361130c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611303906120c7565b60405180910390fd5b6113178383836114a7565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139590612159565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161148e91906116b3565b60405180910390a36114a18484846114ac565b50505050565b505050565b505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114e6826114bb565b9050919050565b6114f6816114db565b811461150157600080fd5b50565b600081359050611513816114ed565b92915050565b60006020828403121561152f5761152e6114b1565b5b600061153d84828501611504565b91505092915050565b60008115159050919050565b61155b81611546565b82525050565b60006020820190506115766000830184611552565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115b657808201518184015260208101905061159b565b60008484015250505050565b6000601f19601f8301169050919050565b60006115de8261157c565b6115e88185611587565b93506115f8818560208601611598565b611601816115c2565b840191505092915050565b6000602082019050818103600083015261162681846115d3565b905092915050565b6000819050919050565b6116418161162e565b811461164c57600080fd5b50565b60008135905061165e81611638565b92915050565b6000806040838503121561167b5761167a6114b1565b5b600061168985828601611504565b925050602061169a8582860161164f565b9150509250929050565b6116ad8161162e565b82525050565b60006020820190506116c860008301846116a4565b92915050565b6000806000606084860312156116e7576116e66114b1565b5b60006116f586828701611504565b935050602061170686828701611504565b92505060406117178682870161164f565b9150509250925092565b600060ff82169050919050565b61173781611721565b82525050565b6000602082019050611752600083018461172e565b92915050565b60006020828403121561176e5761176d6114b1565b5b600061177c8482850161164f565b91505092915050565b61178e81611546565b811461179957600080fd5b50565b6000813590506117ab81611785565b92915050565b600080604083850312156117c8576117c76114b1565b5b60006117d685828601611504565b92505060206117e78582860161179c565b9150509250929050565b6117fa816114db565b82525050565b600060208201905061181560008301846117f1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126118405761183f61181b565b5b8235905067ffffffffffffffff81111561185d5761185c611820565b5b60208301915083602082028301111561187957611878611825565b5b9250929050565b600080600060408486031215611899576118986114b1565b5b600084013567ffffffffffffffff8111156118b7576118b66114b6565b5b6118c38682870161182a565b935093505060206118d68682870161179c565b9150509250925092565b600080604083850312156118f7576118f66114b1565b5b600061190585828601611504565b925050602061191685828601611504565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061196757607f821691505b60208210810361197a57611979611920565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006119ba8261162e565b91506119c58361162e565b92508282019050808211156119dd576119dc611980565b5b92915050565b7f696e76616c69642062616c642e00000000000000000000000000000000000000600082015250565b6000611a19600d83611587565b9150611a24826119e3565b602082019050919050565b60006020820190508181036000830152611a4881611a0c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611aab602583611587565b9150611ab682611a4f565b604082019050919050565b60006020820190508181036000830152611ada81611a9e565b9050919050565b7f6f6e6c792042616c64312e000000000000000000000000000000000000000000600082015250565b6000611b17600b83611587565b9150611b2282611ae1565b602082019050919050565b60006020820190508181036000830152611b4681611b0a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611b8782611721565b915060ff8203611b9a57611b99611980565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611c01602683611587565b9150611c0c82611ba5565b604082019050919050565b60006020820190508181036000830152611c3081611bf4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611c93602483611587565b9150611c9e82611c37565b604082019050919050565b60006020820190508181036000830152611cc281611c86565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611d25602283611587565b9150611d3082611cc9565b604082019050919050565b60006020820190508181036000830152611d5481611d18565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611d91601d83611587565b9150611d9c82611d5b565b602082019050919050565b60006020820190508181036000830152611dc081611d84565b9050919050565b7f69732062616c6465640000000000000000000000000000000000000000000000600082015250565b6000611dfd600983611587565b9150611e0882611dc7565b602082019050919050565b60006020820190508181036000830152611e2c81611df0565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e8f602183611587565b9150611e9a82611e33565b604082019050919050565b60006020820190508181036000830152611ebe81611e82565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f21602283611587565b9150611f2c82611ec5565b604082019050919050565b60006020820190508181036000830152611f5081611f14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611f8d602083611587565b9150611f9882611f57565b602082019050919050565b60006020820190508181036000830152611fbc81611f80565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061201f602583611587565b915061202a82611fc3565b604082019050919050565b6000602082019050818103600083015261204e81612012565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006120b1602383611587565b91506120bc82612055565b604082019050919050565b600060208201905081810360008301526120e0816120a4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612143602683611587565b915061214e826120e7565b604082019050919050565b6000602082019050818103600083015261217281612136565b905091905056fea264697066735822122023ccce8417e81b39cfd03e677748cd1695bee630dcfca2e79af7d6b7ac12126f64736f6c63430008130033