60806040526b033b2e3c9fd0803ce80000006004556000600860006101000a81548160ff0219169083151502179055503480156200003c57600080fd5b5060006200004f620004f360201b60201c565b905080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600060045411620000fe57600080fd5b6200010e620004fb60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000184600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546200052560201b60201c565b33600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024b91906200071c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed91906200071c565b6040518363ffffffff1660e01b81526004016200030c9291906200075f565b6020604051808303816000875af11580156200032c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035291906200071c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600062000422620004fb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200082e565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200055f57600080fd5b6200057b816002546200068760201b62000ae21790919060201c565b600281905550620005d9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200068760201b62000ae21790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200067b9190620007a7565b60405180910390a35050565b6000808284620006989190620007f3565b905083811015620006a857600080fd5b8091505092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006e482620006b7565b9050919050565b620006f681620006d7565b81146200070257600080fd5b50565b6000815190506200071681620006eb565b92915050565b600060208284031215620007355762000734620006b2565b5b6000620007458482850162000705565b91505092915050565b6200075981620006d7565b82525050565b60006040820190506200077660008301856200074e565b6200078560208301846200074e565b9392505050565b6000819050919050565b620007a1816200078c565b82525050565b6000602082019050620007be600083018462000796565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000800826200078c565b91506200080d836200078c565b9250828201905080821115620008285762000827620007c4565b5b92915050565b612060806200083e6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d714610279578063a9059cbb146102a9578063dd62ed3e146102d9578063f2fde38b1461030957610100565b806370a0823114610203578063715018a6146102335780638da5cb5b1461023d57806395d89b411461025b57610100565b806323b872dd116100d357806323b872dd1461017b578063313ce567146101ab57806339509351146101c9578063648c0bb9146101f957610100565b806301339c211461010557806306fdde031461010f578063095ea7b31461012d57806318160ddd1461015d575b600080fd5b61010d610325565b005b610117610408565b60405161012491906115ac565b60405180910390f35b61014760048036038101906101429190611676565b610441565b60405161015491906116d1565b60405180910390f35b610165610458565b60405161017291906116fb565b60405180910390f35b61019560048036038101906101909190611716565b610462565b6040516101a291906116d1565b60405180910390f35b6101b3610513565b6040516101c09190611785565b60405180910390f35b6101e360048036038101906101de9190611676565b610518565b6040516101f091906116d1565b60405180910390f35b6102016105bd565b005b61021d600480360381019061021891906117a0565b61066d565b60405161022a91906116fb565b60405180910390f35b61023b6106b5565b005b61024561080d565b60405161025291906117dc565b60405180910390f35b610263610837565b60405161027091906115ac565b60405180910390f35b610293600480360381019061028e9190611676565b610870565b6040516102a091906116d1565b60405180910390f35b6102c360048036038101906102be9190611676565b610915565b6040516102d091906116d1565b60405180910390f35b6102f360048036038101906102ee91906117f7565b61092c565b60405161030091906116fb565b60405180910390f35b610323600480360381019061031e91906117a0565b6109b3565b005b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ac90611883565b60405180910390fd5b600860009054906101000a900460ff16156103ea576000600860006101000a81548160ff021916908315150217905550610406565b6001600860006101000a81548160ff0219169083151502179055505b565b6040518060400160405280600b81526020017f47414d4520352042414c4c00000000000000000000000000000000000000000081525081565b600061044e338484610b0a565b6001905092915050565b6000600254905090565b600061046f848484610c67565b610508843361050385600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f4090919063ffffffff16565b610b0a565b600190509392505050565b601281565b60006105b333846105ae85600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae290919063ffffffff16565b610b0a565b6001905092915050565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461064d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064490611883565b60405180910390fd5b61066a30610659610458565b606461066591906118d2565b610f69565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106bd610f87565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074390611960565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f4b454b450000000000000000000000000000000000000000000000000000000081525081565b600061090b338461090685600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f4090919063ffffffff16565b610b0a565b6001905092915050565b6000610922338484610c67565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a19906119f2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284610af19190611a12565b905083811015610b0057600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b4357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b7c57600080fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c5a91906116fb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd90611ab8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90611b4a565b60405180910390fd5b80610d4f8461066d565b1015610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790611bb6565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610e345750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610f3057600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610eda5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15610f2f57600860009054906101000a900460ff16610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590611c22565b60405180910390fd5b5b5b610f3b838383610f8f565b505050565b600082821115610f4f57600080fd5b60008284610f5d9190611c42565b90508091505092915050565b6000610f758383611158565b610f7d6112a9565b6001905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fc857600080fd5b611019816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f4090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110ac816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161114b91906116fb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361119157600080fd5b6111a681600254610ae290919063ffffffff16565b6002819055506111fd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161129d91906116fb565b60405180910390a35050565b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3737a250d5630b4cf539739df2c5dacb4c659f2488d6112e2610458565b6040518363ffffffff1660e01b81526004016112ff929190611c76565b6020604051808303816000875af115801561131e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113429190611ccb565b506000600267ffffffffffffffff8111156113605761135f611cf8565b5b60405190808252806020026020018201604052801561138e5781602001602082028036833780820191505090505b50905030816000815181106113a6576113a5611d27565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061140957611408611d27565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff166318cbafe561147c3061066d565b600084600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611770426114b09190611a12565b6040518663ffffffff1660e01b81526004016114d0959493929190611e59565b6000604051808303816000875af11580156114ef573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906115189190611fe1565b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561155657808201518184015260208101905061153b565b60008484015250505050565b6000601f19601f8301169050919050565b600061157e8261151c565b6115888185611527565b9350611598818560208601611538565b6115a181611562565b840191505092915050565b600060208201905081810360008301526115c68184611573565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061160d826115e2565b9050919050565b61161d81611602565b811461162857600080fd5b50565b60008135905061163a81611614565b92915050565b6000819050919050565b61165381611640565b811461165e57600080fd5b50565b6000813590506116708161164a565b92915050565b6000806040838503121561168d5761168c6115d8565b5b600061169b8582860161162b565b92505060206116ac85828601611661565b9150509250929050565b60008115159050919050565b6116cb816116b6565b82525050565b60006020820190506116e660008301846116c2565b92915050565b6116f581611640565b82525050565b600060208201905061171060008301846116ec565b92915050565b60008060006060848603121561172f5761172e6115d8565b5b600061173d8682870161162b565b935050602061174e8682870161162b565b925050604061175f86828701611661565b9150509250925092565b600060ff82169050919050565b61177f81611769565b82525050565b600060208201905061179a6000830184611776565b92915050565b6000602082840312156117b6576117b56115d8565b5b60006117c48482850161162b565b91505092915050565b6117d681611602565b82525050565b60006020820190506117f160008301846117cd565b92915050565b6000806040838503121561180e5761180d6115d8565b5b600061181c8582860161162b565b925050602061182d8582860161162b565b9150509250929050565b7f6e6f742074686520636f72726563742061646472657373210000000000000000600082015250565b600061186d601883611527565b915061187882611837565b602082019050919050565b6000602082019050818103600083015261189c81611860565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118dd82611640565b91506118e883611640565b92508282026118f681611640565b9150828204841483151761190d5761190c6118a3565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061194a602083611527565b915061195582611914565b602082019050919050565b600060208201905081810360008301526119798161193d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006119dc602683611527565b91506119e782611980565b604082019050919050565b60006020820190508181036000830152611a0b816119cf565b9050919050565b6000611a1d82611640565b9150611a2883611640565b9250828201905080821115611a4057611a3f6118a3565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611aa2602583611527565b9150611aad82611a46565b604082019050919050565b60006020820190508181036000830152611ad181611a95565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611b34602383611527565b9150611b3f82611ad8565b604082019050919050565b60006020820190508181036000830152611b6381611b27565b9050919050565b7f45524332303a206e6f7420656e6f7567682062616c616e636500000000000000600082015250565b6000611ba0601983611527565b9150611bab82611b6a565b602082019050919050565b60006020820190508181036000830152611bcf81611b93565b9050919050565b7f6e6f742073746172740000000000000000000000000000000000000000000000600082015250565b6000611c0c600983611527565b9150611c1782611bd6565b602082019050919050565b60006020820190508181036000830152611c3b81611bff565b9050919050565b6000611c4d82611640565b9150611c5883611640565b9250828203905081811115611c7057611c6f6118a3565b5b92915050565b6000604082019050611c8b60008301856117cd565b611c9860208301846116ec565b9392505050565b611ca8816116b6565b8114611cb357600080fd5b50565b600081519050611cc581611c9f565b92915050565b600060208284031215611ce157611ce06115d8565b5b6000611cef84828501611cb6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b6000611d85611d80611d7b84611d56565b611d60565b611640565b9050919050565b611d9581611d6a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611dd081611602565b82525050565b6000611de28383611dc7565b60208301905092915050565b6000602082019050919050565b6000611e0682611d9b565b611e108185611da6565b9350611e1b83611db7565b8060005b83811015611e4c578151611e338882611dd6565b9750611e3e83611dee565b925050600181019050611e1f565b5085935050505092915050565b600060a082019050611e6e60008301886116ec565b611e7b6020830187611d8c565b8181036040830152611e8d8186611dfb565b9050611e9c60608301856117cd565b611ea960808301846116ec565b9695505050505050565b600080fd5b611ec182611562565b810181811067ffffffffffffffff82111715611ee057611edf611cf8565b5b80604052505050565b6000611ef36115ce565b9050611eff8282611eb8565b919050565b600067ffffffffffffffff821115611f1f57611f1e611cf8565b5b602082029050602081019050919050565b600080fd5b600081519050611f448161164a565b92915050565b6000611f5d611f5884611f04565b611ee9565b90508083825260208201905060208402830185811115611f8057611f7f611f30565b5b835b81811015611fa95780611f958882611f35565b845260208401935050602081019050611f82565b5050509392505050565b600082601f830112611fc857611fc7611eb3565b5b8151611fd8848260208601611f4a565b91505092915050565b600060208284031215611ff757611ff66115d8565b5b600082015167ffffffffffffffff811115612015576120146115dd565b5b61202184828501611fb3565b9150509291505056fea26469706673582212200d4f9839ebec63024558beed514d471645c83e788c6413464fcd4ae82c47717c64736f6c63430008120033