60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f4469616d6f6e64205065706500000000000000000000000000000000000000008152506040518060400160405280600581526020017f50455045440000000000000000000000000000000000000000000000000000008152506200009e62000092620000ea60201b60201c565b620000f260201b60201c565b8160049081620000af91906200069a565b508060059081620000c191906200069a565b505050620000e4336d036c341e1f992f96840fe0000000620001b660201b60201c565b6200090e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000228576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021f90620007e2565b60405180910390fd5b6200023c600083836200032f60201b60201c565b806003600082825462000250919062000833565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002a8919062000833565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200030f91906200087f565b60405180910390a36200032b600083836200041b60201b60201c565b5050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015620003d45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b62000416576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040d90620008ec565b60405180910390fd5b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004a257607f821691505b602082108103620004b857620004b76200045a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004e3565b6200052e8683620004e3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200057b620005756200056f8462000546565b62000550565b62000546565b9050919050565b6000819050919050565b62000597836200055a565b620005af620005a68262000582565b848454620004f0565b825550505050565b600090565b620005c6620005b7565b620005d38184846200058c565b505050565b5b81811015620005fb57620005ef600082620005bc565b600181019050620005d9565b5050565b601f8211156200064a576200061481620004be565b6200061f84620004d3565b810160208510156200062f578190505b620006476200063e85620004d3565b830182620005d8565b50505b505050565b600082821c905092915050565b60006200066f600019846008026200064f565b1980831691505092915050565b60006200068a83836200065c565b9150826002028217905092915050565b620006a58262000420565b67ffffffffffffffff811115620006c157620006c06200042b565b5b620006cd825462000489565b620006da828285620005ff565b600060209050601f831160018114620007125760008415620006fd578287015190505b6200070985826200067c565b86555062000779565b601f1984166200072286620004be565b60005b828110156200074c5784890151825560018201915060208501945060208101905062000725565b868310156200076c578489015162000768601f8916826200065c565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007ca601f8362000781565b9150620007d78262000792565b602082019050919050565b60006020820190508181036000830152620007fd81620007bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008408262000546565b91506200084d8362000546565b925082820190508082111562000868576200086762000804565b5b92915050565b620008798162000546565b82525050565b60006020820190506200089660008301846200086e565b92915050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000620008d4600b8362000781565b9150620008e1826200089c565b602082019050919050565b600060208201905081810360008301526200090781620008c5565b9050919050565b611f72806200091e6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806342966c68116100ad57806395d89b411161007157806395d89b411461030a578063a457c2d714610328578063a9059cbb14610358578063dd62ed3e14610388578063f2fde38b146103b857610121565b806342966c681461027857806349bd5a5e1461029457806370a08231146102b2578063715018a6146102e25780638da5cb5b146102ec57610121565b806323b872dd116100f457806323b872dd146101c2578063313ce567146101f257806339509351146102105780633d44fb2014610240578063404e51291461025c57610121565b806306fdde0314610126578063095ea7b31461014457806316c021291461017457806318160ddd146101a4575b600080fd5b61012e6103d4565b60405161013b91906114a4565b60405180910390f35b61015e6004803603810190610159919061155f565b610466565b60405161016b91906115ba565b60405180910390f35b61018e600480360381019061018991906115d5565b610484565b60405161019b91906115ba565b60405180910390f35b6101ac6104a4565b6040516101b99190611611565b60405180910390f35b6101dc60048036038101906101d7919061162c565b6104ae565b6040516101e991906115ba565b60405180910390f35b6101fa6105a6565b604051610207919061169b565b60405180910390f35b61022a6004803603810190610225919061155f565b6105af565b60405161023791906115ba565b60405180910390f35b61025a600480360381019061025591906115d5565b61065b565b005b610276600480360381019061027191906116e2565b61071b565b005b610292600480360381019061028d9190611722565b6107f2565b005b61029c6107ff565b6040516102a9919061175e565b60405180910390f35b6102cc60048036038101906102c791906115d5565b610825565b6040516102d99190611611565b60405180910390f35b6102ea61086e565b005b6102f46108f6565b604051610301919061175e565b60405180910390f35b61031261091f565b60405161031f91906114a4565b60405180910390f35b610342600480360381019061033d919061155f565b6109b1565b60405161034f91906115ba565b60405180910390f35b610372600480360381019061036d919061155f565b610a9c565b60405161037f91906115ba565b60405180910390f35b6103a2600480360381019061039d9190611779565b610aba565b6040516103af9190611611565b60405180910390f35b6103d260048036038101906103cd91906115d5565b610b41565b005b6060600480546103e3906117e8565b80601f016020809104026020016040519081016040528092919081815260200182805461040f906117e8565b801561045c5780601f106104315761010080835404028352916020019161045c565b820191906000526020600020905b81548152906001019060200180831161043f57829003601f168201915b5050505050905090565b600061047a610473610c38565b8484610c40565b6001905092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b6000600354905090565b60006104bb848484610e09565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610506610c38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057d9061188b565b60405180910390fd5b61059a85610592610c38565b858403610c40565b60019150509392505050565b60006012905090565b60006106516105bc610c38565b8484600260006105ca610c38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461064c91906118da565b610c40565b6001905092915050565b610663610c38565b73ffffffffffffffffffffffffffffffffffffffff166106816108f6565b73ffffffffffffffffffffffffffffffffffffffff16146106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce9061195a565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610723610c38565b73ffffffffffffffffffffffffffffffffffffffff166107416108f6565b73ffffffffffffffffffffffffffffffffffffffff1614610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078e9061195a565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6107fc338261108b565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610876610c38565b73ffffffffffffffffffffffffffffffffffffffff166108946108f6565b73ffffffffffffffffffffffffffffffffffffffff16146108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e19061195a565b60405180910390fd5b6108f46000611263565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461092e906117e8565b80601f016020809104026020016040519081016040528092919081815260200182805461095a906117e8565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b600080600260006109c0610c38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a74906119ec565b60405180910390fd5b610a91610a88610c38565b85858403610c40565b600191505092915050565b6000610ab0610aa9610c38565b8484610e09565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610b49610c38565b73ffffffffffffffffffffffffffffffffffffffff16610b676108f6565b73ffffffffffffffffffffffffffffffffffffffff1614610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb49061195a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390611a7e565b60405180910390fd5b610c3581611263565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690611b10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1590611ba2565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610dfc9190611611565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90611c34565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ede90611cc6565b60405180910390fd5b610ef2838383611327565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090611d58565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461100e91906118da565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110729190611611565b60405180910390a361108584848461140f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190611dea565b60405180910390fd5b61110682600083611327565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490611e7c565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282546111e59190611e9c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161124a9190611611565b60405180910390a361125e8360008461140f565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113cb5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61140a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140190611f1c565b60405180910390fd5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561144e578082015181840152602081019050611433565b60008484015250505050565b6000601f19601f8301169050919050565b600061147682611414565b611480818561141f565b9350611490818560208601611430565b6114998161145a565b840191505092915050565b600060208201905081810360008301526114be818461146b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114f6826114cb565b9050919050565b611506816114eb565b811461151157600080fd5b50565b600081359050611523816114fd565b92915050565b6000819050919050565b61153c81611529565b811461154757600080fd5b50565b60008135905061155981611533565b92915050565b60008060408385031215611576576115756114c6565b5b600061158485828601611514565b92505060206115958582860161154a565b9150509250929050565b60008115159050919050565b6115b48161159f565b82525050565b60006020820190506115cf60008301846115ab565b92915050565b6000602082840312156115eb576115ea6114c6565b5b60006115f984828501611514565b91505092915050565b61160b81611529565b82525050565b60006020820190506116266000830184611602565b92915050565b600080600060608486031215611645576116446114c6565b5b600061165386828701611514565b935050602061166486828701611514565b92505060406116758682870161154a565b9150509250925092565b600060ff82169050919050565b6116958161167f565b82525050565b60006020820190506116b0600083018461168c565b92915050565b6116bf8161159f565b81146116ca57600080fd5b50565b6000813590506116dc816116b6565b92915050565b600080604083850312156116f9576116f86114c6565b5b600061170785828601611514565b9250506020611718858286016116cd565b9150509250929050565b600060208284031215611738576117376114c6565b5b60006117468482850161154a565b91505092915050565b611758816114eb565b82525050565b6000602082019050611773600083018461174f565b92915050565b600080604083850312156117905761178f6114c6565b5b600061179e85828601611514565b92505060206117af85828601611514565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061180057607f821691505b602082108103611813576118126117b9565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061187560288361141f565b915061188082611819565b604082019050919050565b600060208201905081810360008301526118a481611868565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118e582611529565b91506118f083611529565b9250828201905080821115611908576119076118ab565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061194460208361141f565b915061194f8261190e565b602082019050919050565b6000602082019050818103600083015261197381611937565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006119d660258361141f565b91506119e18261197a565b604082019050919050565b60006020820190508181036000830152611a05816119c9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611a6860268361141f565b9150611a7382611a0c565b604082019050919050565b60006020820190508181036000830152611a9781611a5b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611afa60248361141f565b9150611b0582611a9e565b604082019050919050565b60006020820190508181036000830152611b2981611aed565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611b8c60228361141f565b9150611b9782611b30565b604082019050919050565b60006020820190508181036000830152611bbb81611b7f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611c1e60258361141f565b9150611c2982611bc2565b604082019050919050565b60006020820190508181036000830152611c4d81611c11565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611cb060238361141f565b9150611cbb82611c54565b604082019050919050565b60006020820190508181036000830152611cdf81611ca3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611d4260268361141f565b9150611d4d82611ce6565b604082019050919050565b60006020820190508181036000830152611d7181611d35565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611dd460218361141f565b9150611ddf82611d78565b604082019050919050565b60006020820190508181036000830152611e0381611dc7565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e6660228361141f565b9150611e7182611e0a565b604082019050919050565b60006020820190508181036000830152611e9581611e59565b9050919050565b6000611ea782611529565b9150611eb283611529565b9250828203905081811115611eca57611ec96118ab565b5b92915050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000611f06600b8361141f565b9150611f1182611ed0565b602082019050919050565b60006020820190508181036000830152611f3581611ef9565b905091905056fea2646970667358221220abc614d68418fe7efd5f8d22b453190fb4faf580b179b73c5f0b8326a244b98e64736f6c63430008120033