60806040526000600560006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600581526020017f474d46414d0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f474d46414d0000000000000000000000000000000000000000000000000000008152508181620000bb620000af6200013360201b60201c565b6200013b60201b60201c565b8160069081620000cc91906200063d565b508060079081620000de91906200063d565b505050505060016009819055506200012d3362000100620001ff60201b60201c565b600a6200010e9190620008b4565b6503d37ec7b50062000121919062000905565b6200020860201b60201c565b62000a3c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200027a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027190620009b1565b60405180910390fd5b6200028e60008383620003b960201b60201c565b630f3eae65640997e6e50902673398bc1d25f112ed64085774394d02028060005260016020526040600020720fffffffffffffffffffffffffffffffffffff815550508060046000828254620002e59190620009d3565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000399919062000a1f565b60405180910390a3620003b560008383620003be60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044557607f821691505b6020821081036200045b576200045a620003fd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000486565b620004d1868362000486565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200051e620005186200051284620004e9565b620004f3565b620004e9565b9050919050565b6000819050919050565b6200053a83620004fd565b62000552620005498262000525565b84845462000493565b825550505050565b600090565b620005696200055a565b620005768184846200052f565b505050565b5b818110156200059e57620005926000826200055f565b6001810190506200057c565b5050565b601f821115620005ed57620005b78162000461565b620005c28462000476565b81016020851015620005d2578190505b620005ea620005e18562000476565b8301826200057b565b50505b505050565b600082821c905092915050565b60006200061260001984600802620005f2565b1980831691505092915050565b60006200062d8383620005ff565b9150826002028217905092915050565b6200064882620003c3565b67ffffffffffffffff811115620006645762000663620003ce565b5b6200067082546200042c565b6200067d828285620005a2565b600060209050601f831160018114620006b55760008415620006a0578287015190505b620006ac85826200061f565b8655506200071c565b601f198416620006c58662000461565b60005b82811015620006ef57848901518255600182019150602085019450602081019050620006c8565b868310156200070f57848901516200070b601f891682620005ff565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007b2578086048111156200078a576200078962000724565b5b60018516156200079a5780820291505b8081029050620007aa8562000753565b94506200076a565b94509492505050565b600082620007cd5760019050620008a0565b81620007dd5760009050620008a0565b8160018114620007f65760028114620008015762000837565b6001915050620008a0565b60ff84111562000816576200081562000724565b5b8360020a91508482111562000830576200082f62000724565b5b50620008a0565b5060208310610133831016604e8410600b8410161715620008715782820a9050838111156200086b576200086a62000724565b5b620008a0565b62000880848484600162000760565b925090508184048111156200089a576200089962000724565b5b81810290505b9392505050565b600060ff82169050919050565b6000620008c182620004e9565b9150620008ce83620008a7565b9250620008fd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007bb565b905092915050565b60006200091282620004e9565b91506200091f83620004e9565b92508282026200092f81620004e9565b9150828204841483151762000949576200094862000724565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000999601f8362000950565b9150620009a68262000961565b602082019050919050565b60006020820190508181036000830152620009cc816200098a565b9050919050565b6000620009e082620004e9565b9150620009ed83620004e9565b925082820190508082111562000a085762000a0762000724565b5b92915050565b62000a1981620004e9565b82525050565b600060208201905062000a36600083018462000a0e565b92915050565b6122318062000a4c6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d71461034f578063a9059cbb1461037f578063beabacc8146103af578063dd62ed3e146103cb578063f2fde38b146103fb578063f6ee6ba81461041757610142565b8063715018a6146102d157806373ed6b13146102db5780638d988a5c146102f75780638da5cb5b1461031357806395d89b411461033157610142565b806338bf3cfa1161010a57806338bf3cfa14610201578063395093511461021d578063477e19441461024d578063618a2f5e1461026957806370a08231146102855780637111a994146102b557610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b3578063313ce567146101e3575b600080fd5b61014f610447565b60405161015c9190611611565b60405180910390f35b61017f600480360381019061017a91906116d1565b6104d9565b60405161018c919061172c565b60405180910390f35b61019d6104fc565b6040516101aa9190611756565b60405180910390f35b6101cd60048036038101906101c89190611771565b610506565b6040516101da919061172c565b60405180910390f35b6101eb610535565b6040516101f891906117e0565b60405180910390f35b61021b600480360381019061021691906117fb565b61053e565b005b610237600480360381019061023291906116d1565b61058a565b604051610244919061172c565b60405180910390f35b6102676004803603810190610262919061188d565b6105c1565b005b610283600480360381019061027e91906118da565b61066e565b005b61029f600480360381019061029a91906117fb565b6107d8565b6040516102ac9190611756565b60405180910390f35b6102cf60048036038101906102ca91906119b8565b610821565b005b6102d9610917565b005b6102f560048036038101906102f091906118da565b61092b565b005b610311600480360381019061030c919061188d565b610a96565b005b61031b610b43565b6040516103289190611a7b565b60405180910390f35b610339610b6c565b6040516103469190611611565b60405180910390f35b610369600480360381019061036491906116d1565b610bfe565b604051610376919061172c565b60405180910390f35b610399600480360381019061039491906116d1565b610c75565b6040516103a6919061172c565b60405180910390f35b6103c960048036038101906103c49190611771565b610c98565b005b6103e560048036038101906103e09190611a96565b610d02565b6040516103f29190611756565b60405180910390f35b610415600480360381019061041091906117fb565b610d89565b005b610431600480360381019061042c91906117fb565b610e0c565b60405161043e919061172c565b60405180910390f35b60606006805461045690611b05565b80601f016020809104026020016040519081016040528092919081815260200182805461048290611b05565b80156104cf5780601f106104a4576101008083540402835291602001916104cf565b820191906000526020600020905b8154815290600101906020018083116104b257829003601f168201915b5050505050905090565b6000806104e4610e62565b90506104f1818585610e6a565b600191505092915050565b6000600454905090565b600080610511610e62565b905061051e858285611033565b6105298585856110bf565b60019150509392505050565b60006012905090565b610546611435565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610595610e62565b90506105b68185856105a78589610d02565b6105b19190611b65565b610e6a565b600191505092915050565b6105c9611435565b60005b82829050811015610669576000600260008585858181106105f0576105ef611b99565b5b905060200201602081019061060591906117fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061066190611bc8565b9150506105cc565b505050565b60005b848490508110156107d05784848281811061068f5761068e611b99565b5b90506020020160208101906106a491906117fb565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82285600080876040516107079493929190611c55565b60405180910390a384848281811061072257610721611b99565b5b905060200201602081019061073791906117fb565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107b59190611756565b60405180910390a380806107c890611bc8565b915050610671565b505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005b8686905081101561090e5784848281811061084257610841611b99565b5b905060200201602081019061085791906117fb565b73ffffffffffffffffffffffffffffffffffffffff168787838181106108805761087f611b99565b5b905060200201602081019061089591906117fb565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8585858181106108df576108de611b99565b5b905060200201356040516108f39190611756565b60405180910390a3808061090690611bc8565b915050610824565b50505050505050565b61091f611435565b61092960006114b3565b565b60005b84849050811015610a8e5784848281811061094c5761094b611b99565b5b905060200201602081019061096191906117fb565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8226000868660006040516109c59493929190611c9a565b60405180910390a3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858583818110610a1957610a18611b99565b5b9050602002016020810190610a2e91906117fb565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a739190611756565b60405180910390a38080610a8690611bc8565b91505061092e565b505050505050565b610a9e611435565b60005b82829050811015610b3e57600160026000858585818110610ac557610ac4611b99565b5b9050602002016020810190610ada91906117fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b3690611bc8565b915050610aa1565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610b7b90611b05565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba790611b05565b8015610bf45780601f10610bc957610100808354040283529160200191610bf4565b820191906000526020600020905b815481529060010190602001808311610bd757829003601f168201915b5050505050905090565b600080610c09610e62565b90506000610c178286610d02565b905083811015610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390611d51565b60405180910390fd5b610c698286868403610e6a565b60019250505092915050565b600080610c80610e62565b9050610c8d8185856110bf565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cf59190611756565b60405180910390a3505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d91611435565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790611de3565b60405180910390fd5b610e09816114b3565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090611e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90611f07565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110269190611756565b60405180910390a3505050565b600061103f8484610d02565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110b957818110156110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290611f73565b60405180910390fd5b6110b88484848403610e6a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590612005565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361119d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119490612097565b60405180910390fd5b6111a8838383611577565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690612129565b60405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806112d05750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561132c5760011515600560009054906101000a900460ff1615151461132b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113229061216f565b60405180910390fd5b5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161141c9190611756565b60405180910390a361142f84848461157c565b50505050565b61143d610e62565b73ffffffffffffffffffffffffffffffffffffffff1661145b610b43565b73ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a8906121db565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115bb5780820151818401526020810190506115a0565b60008484015250505050565b6000601f19601f8301169050919050565b60006115e382611581565b6115ed818561158c565b93506115fd81856020860161159d565b611606816115c7565b840191505092915050565b6000602082019050818103600083015261162b81846115d8565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116688261163d565b9050919050565b6116788161165d565b811461168357600080fd5b50565b6000813590506116958161166f565b92915050565b6000819050919050565b6116ae8161169b565b81146116b957600080fd5b50565b6000813590506116cb816116a5565b92915050565b600080604083850312156116e8576116e7611633565b5b60006116f685828601611686565b9250506020611707858286016116bc565b9150509250929050565b60008115159050919050565b61172681611711565b82525050565b6000602082019050611741600083018461171d565b92915050565b6117508161169b565b82525050565b600060208201905061176b6000830184611747565b92915050565b60008060006060848603121561178a57611789611633565b5b600061179886828701611686565b93505060206117a986828701611686565b92505060406117ba868287016116bc565b9150509250925092565b600060ff82169050919050565b6117da816117c4565b82525050565b60006020820190506117f560008301846117d1565b92915050565b60006020828403121561181157611810611633565b5b600061181f84828501611686565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261184d5761184c611828565b5b8235905067ffffffffffffffff81111561186a5761186961182d565b5b60208301915083602082028301111561188657611885611832565b5b9250929050565b600080602083850312156118a4576118a3611633565b5b600083013567ffffffffffffffff8111156118c2576118c1611638565b5b6118ce85828601611837565b92509250509250929050565b6000806000806000608086880312156118f6576118f5611633565b5b600061190488828901611686565b955050602086013567ffffffffffffffff81111561192557611924611638565b5b61193188828901611837565b94509450506040611944888289016116bc565b9250506060611955888289016116bc565b9150509295509295909350565b60008083601f84011261197857611977611828565b5b8235905067ffffffffffffffff8111156119955761199461182d565b5b6020830191508360208202830111156119b1576119b0611832565b5b9250929050565b600080600080600080606087890312156119d5576119d4611633565b5b600087013567ffffffffffffffff8111156119f3576119f2611638565b5b6119ff89828a01611837565b9650965050602087013567ffffffffffffffff811115611a2257611a21611638565b5b611a2e89828a01611837565b9450945050604087013567ffffffffffffffff811115611a5157611a50611638565b5b611a5d89828a01611962565b92509250509295509295509295565b611a758161165d565b82525050565b6000602082019050611a906000830184611a6c565b92915050565b60008060408385031215611aad57611aac611633565b5b6000611abb85828601611686565b9250506020611acc85828601611686565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b1d57607f821691505b602082108103611b3057611b2f611ad6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b708261169b565b9150611b7b8361169b565b9250828201905080821115611b9357611b92611b36565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611bd38261169b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c0557611c04611b36565b5b600182019050919050565b6000819050919050565b6000819050919050565b6000611c3f611c3a611c3584611c10565b611c1a565b61169b565b9050919050565b611c4f81611c24565b82525050565b6000608082019050611c6a6000830187611747565b611c776020830186611c46565b611c846040830185611c46565b611c916060830184611747565b95945050505050565b6000608082019050611caf6000830187611c46565b611cbc6020830186611747565b611cc96040830185611747565b611cd66060830184611c46565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611d3b60258361158c565b9150611d4682611cdf565b604082019050919050565b60006020820190508181036000830152611d6a81611d2e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611dcd60268361158c565b9150611dd882611d71565b604082019050919050565b60006020820190508181036000830152611dfc81611dc0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e5f60248361158c565b9150611e6a82611e03565b604082019050919050565b60006020820190508181036000830152611e8e81611e52565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611ef160228361158c565b9150611efc82611e95565b604082019050919050565b60006020820190508181036000830152611f2081611ee4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611f5d601d8361158c565b9150611f6882611f27565b602082019050919050565b60006020820190508181036000830152611f8c81611f50565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611fef60258361158c565b9150611ffa82611f93565b604082019050919050565b6000602082019050818103600083015261201e81611fe2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061208160238361158c565b915061208c82612025565b604082019050919050565b600060208201905081810360008301526120b081612074565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061211360268361158c565b915061211e826120b7565b604082019050919050565b6000602082019050818103600083015261214281612106565b9050919050565b50565b600061215960008361158c565b915061216482612149565b600082019050919050565b600060208201905081810360008301526121888161214c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006121c560208361158c565b91506121d08261218f565b602082019050919050565b600060208201905081810360008301526121f4816121b8565b905091905056fea2646970667358221220f2bc4decccfdcffc0943ec9a876f65a2b5ae998bd31e7177a3e7a3ae0feb0f8264736f6c63430008130033